| 3512 | }; |
| 3513 | |
| 3514 | void DispatchCallback(dmMessage::Message *message, void* user_ptr) |
| 3515 | { |
| 3516 | DispatchContext* context = (DispatchContext*)user_ptr; |
| 3517 | HRenderScriptInstance instance = context->m_Instance; |
| 3518 | if (message->m_Descriptor != 0) |
| 3519 | { |
| 3520 | dmDDF::Descriptor* descriptor = (dmDDF::Descriptor*)message->m_Descriptor; |
| 3521 | if (descriptor == dmRenderDDF::DrawText::m_DDFDescriptor || descriptor == dmRenderDDF::DrawDebugText::m_DDFDescriptor) |
| 3522 | { |
| 3523 | if (instance->m_RenderContext->m_SystemFontMap == 0) |
| 3524 | { |
| 3525 | dmLogWarning("The text can not be rendered since the system font is not set."); |
| 3526 | context->m_Result = RENDER_SCRIPT_RESULT_FAILED; |
| 3527 | return; |
| 3528 | } |
| 3529 | |
| 3530 | DrawTextParams params; |
| 3531 | if (descriptor == dmRenderDDF::DrawText::m_DDFDescriptor) |
| 3532 | { |
| 3533 | dmRenderDDF::DrawText* dt = (dmRenderDDF::DrawText*)message->m_Data; |
| 3534 | const char* text = (const char*) ((uintptr_t) dt + (uintptr_t) dt->m_Text); |
| 3535 | params.m_Text = text; |
| 3536 | params.m_WorldTransform.setTranslation(dmVMath::Vector3(dt->m_Position)); |
| 3537 | params.m_FaceColor = dmVMath::Vector4(0.0f, 0.0f, 1.0f, 1.0f); |
| 3538 | } |
| 3539 | else |
| 3540 | { |
| 3541 | dmRenderDDF::DrawDebugText* dt = (dmRenderDDF::DrawDebugText*)message->m_Data; |
| 3542 | const char* text = (const char*) ((uintptr_t) dt + (uintptr_t) dt->m_Text); |
| 3543 | params.m_Text = text; |
| 3544 | params.m_WorldTransform.setTranslation(dmVMath::Vector3(dt->m_Position)); |
| 3545 | params.m_FaceColor = dt->m_Color; |
| 3546 | } |
| 3547 | DrawText(instance->m_RenderContext, instance->m_RenderContext->m_SystemFontMap, 0, 0, params); |
| 3548 | return; |
| 3549 | } |
| 3550 | else if (descriptor == dmRenderDDF::DrawLine::m_DDFDescriptor) |
| 3551 | { |
| 3552 | dmRenderDDF::DrawLine* dl = (dmRenderDDF::DrawLine*)message->m_Data; |
| 3553 | Line3D(instance->m_RenderContext, dl->m_StartPoint, dl->m_EndPoint, dl->m_Color, dl->m_Color); |
| 3554 | return; |
| 3555 | } |
| 3556 | else if (descriptor == dmRenderDDF::Resize::m_DDFDescriptor) |
| 3557 | { |
| 3558 | dmRenderDDF::Resize* resize_msg = (dmRenderDDF::Resize*)message->m_Data; |
| 3559 | dmGraphics::ResizeWindow(instance->m_RenderContext->m_GraphicsContext, resize_msg->m_Width, resize_msg->m_Height); |
| 3560 | return; |
| 3561 | } |
| 3562 | } |
| 3563 | context->m_Result = RunScript(instance, RENDER_SCRIPT_FUNCTION_ONMESSAGE, message); |
| 3564 | } |
| 3565 | |
| 3566 | RenderScriptResult DispatchRenderScriptInstance(HRenderScriptInstance instance) |
| 3567 | { |