mirror of
https://github.com/CTCaer/RetroArch.git
synced 2024-12-13 22:08:34 +00:00
(OpenGL ES) Pack texture rows manually instead of making multiple calls to glTexSubImage2D.
This commit is contained in:
parent
3a85a68230
commit
95fa37b178
28
gfx/gl.c
28
gfx/gl.c
@ -997,13 +997,27 @@ static inline void gl_copy_frame(gl_t *gl, const void *frame, unsigned width, un
|
||||
}
|
||||
else // Slower path.
|
||||
{
|
||||
const uint8_t *src = (const uint8_t*)frame;
|
||||
for (unsigned h = 0; h < height; h++, src += pitch)
|
||||
const unsigned frame_bytes = width * height * gl->base_size;
|
||||
const unsigned line_bytes = width * gl->base_size;
|
||||
|
||||
if(gl->tex_pack_buf_size < frame_bytes)
|
||||
{
|
||||
glTexSubImage2D(GL_TEXTURE_2D,
|
||||
0, 0, h, width, 1, gl->texture_type,
|
||||
gl->texture_fmt, src);
|
||||
free(gl->tex_pack_buf);
|
||||
gl->tex_pack_buf = malloc(frame_bytes);
|
||||
gl->tex_pack_buf_size = frame_bytes;
|
||||
}
|
||||
|
||||
uint8_t* dst = gl->tex_pack_buf;
|
||||
const uint8_t *src = (const uint8_t*)frame;
|
||||
|
||||
for (unsigned h = 0; h < height; h++, src += pitch, dst += line_bytes)
|
||||
{
|
||||
memcpy(dst, src, line_bytes);
|
||||
}
|
||||
|
||||
glTexSubImage2D(GL_TEXTURE_2D,
|
||||
0, 0, 0, width, height, gl->texture_type,
|
||||
gl->texture_fmt, gl->tex_pack_buf);
|
||||
}
|
||||
}
|
||||
#else
|
||||
@ -1248,6 +1262,10 @@ static void gl_free(void *data)
|
||||
free(gl->empty_buf);
|
||||
free(gl->conv_buffer);
|
||||
|
||||
#if defined(HAVE_OPENGLES)
|
||||
free(gl->tex_pack_buf);
|
||||
#endif
|
||||
|
||||
free(gl);
|
||||
}
|
||||
|
||||
|
@ -292,6 +292,12 @@ typedef struct gl
|
||||
unsigned pbo_readback_index;
|
||||
struct scaler_ctx pbo_readback_scaler;
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_OPENGLES)
|
||||
uint8_t* tex_pack_buf;
|
||||
unsigned tex_pack_buf_size;
|
||||
#endif
|
||||
|
||||
} gl_t;
|
||||
|
||||
// Windows ... <_<
|
||||
|
Loading…
Reference in New Issue
Block a user