Skip to content

Commit a1a8675

Browse files
committed
GL3 renderer: Fix an unintended debug assertion when creating a render texture
1 parent d7d0b6e commit a1a8675

File tree

1 file changed

+30
-19
lines changed

1 file changed

+30
-19
lines changed

Backends/RmlUi_Renderer_GL3.cpp

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,27 @@ static void DestroyFramebuffer(FramebufferData& fb)
717717
fb = {};
718718
}
719719

720+
static GLuint CreateTexture(Rml::Span<const Rml::byte> source_data, Rml::Vector2i source_dimensions)
721+
{
722+
GLuint texture_id = 0;
723+
glGenTextures(1, &texture_id);
724+
if (texture_id == 0)
725+
return 0;
726+
727+
glBindTexture(GL_TEXTURE_2D, texture_id);
728+
729+
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, source_dimensions.x, source_dimensions.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, source_data.data());
730+
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
731+
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
732+
733+
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
734+
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
735+
736+
glBindTexture(GL_TEXTURE_2D, 0);
737+
738+
return texture_id;
739+
}
740+
720741
static void BindTexture(const FramebufferData& fb)
721742
{
722743
if (!fb.color_tex_buffer)
@@ -1277,25 +1298,12 @@ Rml::TextureHandle RenderInterface_GL3::GenerateTexture(Rml::Span<const Rml::byt
12771298
{
12781299
RMLUI_ASSERT(source_data.data() && source_data.size() == size_t(source_dimensions.x * source_dimensions.y * 4));
12791300

1280-
GLuint texture_id = 0;
1281-
glGenTextures(1, &texture_id);
1301+
GLuint texture_id = Gfx::CreateTexture(source_data, source_dimensions);
12821302
if (texture_id == 0)
12831303
{
12841304
Rml::Log::Message(Rml::Log::LT_ERROR, "Failed to generate texture.");
1285-
return false;
1305+
return {};
12861306
}
1287-
1288-
glBindTexture(GL_TEXTURE_2D, texture_id);
1289-
1290-
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, source_dimensions.x, source_dimensions.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, source_data.data());
1291-
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
1292-
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
1293-
1294-
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
1295-
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
1296-
1297-
glBindTexture(GL_TEXTURE_2D, 0);
1298-
12991307
return (Rml::TextureHandle)texture_id;
13001308
}
13011309

@@ -1956,9 +1964,12 @@ Rml::TextureHandle RenderInterface_GL3::SaveLayerAsTexture()
19561964
RMLUI_ASSERT(scissor_state.Valid());
19571965
const Rml::Rectanglei bounds = scissor_state;
19581966

1959-
Rml::TextureHandle render_texture = GenerateTexture({}, bounds.Size());
1960-
if (!render_texture)
1967+
GLuint render_texture = Gfx::CreateTexture({}, bounds.Size());
1968+
if (render_texture == 0)
1969+
{
1970+
Rml::Log::Message(Rml::Log::LT_ERROR, "Failed to create render texture.");
19611971
return {};
1972+
}
19621973

19631974
BlitLayerToPostprocessPrimary(render_layers.GetTopLayerHandle());
19641975

@@ -1978,7 +1989,7 @@ Rml::TextureHandle RenderInterface_GL3::SaveLayerAsTexture()
19781989
GL_COLOR_BUFFER_BIT, GL_NEAREST //
19791990
);
19801991

1981-
glBindTexture(GL_TEXTURE_2D, (GLuint)render_texture);
1992+
glBindTexture(GL_TEXTURE_2D, render_texture);
19821993

19831994
const Gfx::FramebufferData& texture_source = destination;
19841995
glBindFramebuffer(GL_READ_FRAMEBUFFER, texture_source.framebuffer);
@@ -1988,7 +1999,7 @@ Rml::TextureHandle RenderInterface_GL3::SaveLayerAsTexture()
19881999
glBindFramebuffer(GL_FRAMEBUFFER, render_layers.GetTopLayer().framebuffer);
19892000
Gfx::CheckGLError("SaveLayerAsTexture");
19902001

1991-
return render_texture;
2002+
return (Rml::TextureHandle)render_texture;
19922003
}
19932004

19942005
Rml::CompiledFilterHandle RenderInterface_GL3::SaveLayerAsMaskImage()

0 commit comments

Comments
 (0)