summaryrefslogtreecommitdiffhomepage
path: root/src/rmlui/rodeo_rmlui.cpp
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2023-06-23 02:47:55 -0400
committerrealtradam <[email protected]>2023-06-23 02:47:55 -0400
commitf26149d554a6c473ec51b8c8f59af12f1bedea84 (patch)
tree07c8464fd179504276bea3e4103b4ad79ef6fcfa /src/rmlui/rodeo_rmlui.cpp
parent5f57ca96bb0702be7a6b518626ad1d300e5d92e6 (diff)
downloadRodeoKit-f26149d554a6c473ec51b8c8f59af12f1bedea84.tar.gz
RodeoKit-f26149d554a6c473ec51b8c8f59af12f1bedea84.zip
progress on implementing render interface
Diffstat (limited to 'src/rmlui/rodeo_rmlui.cpp')
-rw-r--r--src/rmlui/rodeo_rmlui.cpp180
1 files changed, 180 insertions, 0 deletions
diff --git a/src/rmlui/rodeo_rmlui.cpp b/src/rmlui/rodeo_rmlui.cpp
new file mode 100644
index 0000000..c9f872a
--- /dev/null
+++ b/src/rmlui/rodeo_rmlui.cpp
@@ -0,0 +1,180 @@
+
+#define RMLUI_STATIC_LIB
+
+// -- internal --
+// public
+#include "rodeo/gfx.h"
+// private
+#include "rmlui/irodeo_rmlui.hpp"
+
+// -- external --
+#include "RmlUi/Core/Core.h"
+#include "RmlUi/Core/FileInterface.h"
+#include "RmlUi/Core/Log.h"
+#include "RmlUi/Core/Platform.h"
+
+
+
+RenderInterface_Rodeo::RenderInterface_Rodeo()
+{
+}
+
+RenderInterface_Rodeo::~RenderInterface_Rodeo()
+{
+}
+
+void RenderInterface_Rodeo::SetViewport(int width, int height)
+{
+ viewport_width = width;
+ viewport_height = height;
+}
+
+void RenderInterface_Rodeo::BeginFrame()
+{
+ SetViewport((int)rodeo_gfx_width_get(), (int)rodeo_gfx_height_get());
+ rodeo_gfx_renderer_flush();
+ rodeo_gfx_matrix_push();
+}
+
+void RenderInterface_Rodeo::EndFrame()
+{
+ //if(is_projecting)
+ //{
+ // rlMatrixMode(RL_PROJECTION);
+ // rlPopMatrix();
+ // rlMatrixMode(RL_MODELVIEW);
+ // is_projecting = false;
+ //}
+ rodeo_gfx_renderer_flush();
+ rodeo_gfx_matrix_pop();
+ rodeo_gfx_scissor_end();
+}
+
+void RenderInterface_Rodeo::RenderGeometry(
+ Rml::Vertex* vertices,
+ int num_vertices, // ignore?
+ int* indices,
+ int num_indices,
+ const Rml::TextureHandle texture,
+ const Rml::Vector2f& translation
+ )
+{
+ unsigned int textureId = 0;
+ if(texture != NULL)
+ {
+ textureId = texture;
+ }
+
+ rlBegin(RL_TRIANGLES);
+ rlSetTexture(textureId);
+ rlPushMatrix();
+ rlTranslatef(translation.x, translation.y, 0);
+
+ for (unsigned int i = 0; i <= (num_indices - 3); i += 3)
+ {
+ if(rlCheckRenderBatchLimit(3))
+ {
+ rlBegin(RL_TRIANGLES);
+ rlSetTexture(textureId);
+ }
+
+ int indexA = indices[i];
+ int indexB = indices[i + 1];
+ int indexC = indices[i + 2];
+
+ Rml::Vertex vertexA = vertices[indexA];
+ Rml::Vertex vertexB = vertices[indexB];
+ Rml::Vertex vertexC = vertices[indexC];
+
+ RenderInterface_Rodeo::RodeoTriangleVert(vertexA);
+ RenderInterface_Rodeo::RodeoTriangleVert(vertexB);
+ RenderInterface_Rodeo::RodeoTriangleVert(vertexC);
+ }
+
+
+ rlPopMatrix();
+ rlDrawRenderBatchActive();
+ rlEnd();
+}
+
+
+void RenderInterface_Rodeo::EnableScissorRegion(bool enable)
+{
+ if(enable)
+ {
+ // do nothing
+ }
+ else
+ {
+ rodeo_gfx_scissor_end();
+ }
+}
+
+void RenderInterface_Rodeo::SetScissorRegion(int x, int y, int width, int height)
+{
+ rodeo_gfx_scissor_begin(
+ { (float)x, (float)y, (float)width, (float)height }
+ );
+ //rlScissor(x, viewport_height - (y + height), width, height);
+}
+
+
+bool RenderInterface_Rodeo::LoadTexture(Rml::TextureHandle& texture_handle, Rml::Vector2i& texture_dimensions, const Rml::String& source)
+{
+ rodeo_gfx_texture_2d_t texture = rodeo_gfx_texture_2d_create_from_path(cstr_from(source.c_str()));
+
+ texture_dimensions.x = (int)texture.width;
+ texture_dimensions.y = (int)texture.height;
+ texture_handle = (Rml::TextureHandle) texture.data;
+
+ return true;
+}
+
+bool RenderInterface_Rodeo::GenerateTexture(Rml::TextureHandle& texture_handle, const Rml::byte* source, const Rml::Vector2i& source_dimensions)
+{
+ rodeo_gfx_texture_2d_t texture = rodeo_gfx_texture_2d_create_from_RGBA8(
+ (uint16_t)source_dimensions.x,
+ (uint16_t)source_dimensions.y,
+ source
+ );
+ //Image image = GenImageColor(source_dimensions.x, source_dimensions.y, BLANK);
+ //Texture texture = LoadTextureFromImage(image);
+
+ texture_handle = (Rml::TextureHandle)texture.data;
+
+ return true;
+}
+
+void RenderInterface_Rodeo::ReleaseTexture(Rml::TextureHandle texture_handle)
+{
+ rodeo_gfx_texture_2d_destroy({ (irodeo_gfx_texture_2d_t*)texture_handle, 0, 0 });
+}
+
+void RenderInterface_Rodeo::SetTransform(const Rml::Matrix4f* new_transform)
+{
+ if(new_transform != nullptr)
+ {
+ //if(!is_projecting)
+ //{
+ // rlMatrixMode(RL_PROJECTION);
+ // rlPushMatrix();
+ // rlLoadIdentity();
+ // rlFrustum(0.0, viewport_width, 0.0, viewport_height, -100.0, 100.0);
+ // rlMatrixMode(RL_MODELVIEW);
+ // is_projecting = true;
+ //}
+ //rlLoadIdentity();
+
+ rodeo_math_mat4_t matrix;
+ memcpy(matrix.raw, new_transform->data(), sizeof(matrix));
+ rodeo_gfx_matrix_set(matrix);
+
+ //rlScalef(1.0,1.0,0.001);
+ //rlTranslatef(0.0,0.0,100.0);
+ }
+ else
+ {
+ rodeo_gfx_matrix_pop();
+ rodeo_gfx_matrix_push();
+ }
+}