YaGL: Convert textures properly 96/17196/1
authorStanislav Vorobiov <s.vorobiov@samsung.com>
Tue, 4 Mar 2014 15:30:11 +0000 (19:30 +0400)
committerStanislav Vorobiov <s.vorobiov@samsung.com>
Tue, 4 Mar 2014 15:30:11 +0000 (19:30 +0400)
1. GL_ALPHA to GL_RGBA conversion is wrong after all, previous
   conversion was correct
2. GLESv1_CM should never convert textures since it always uses
   legacy host OpenGL context

Change-Id: I1b8062c85f377b32bc2f75a58ff969e83acd65d0

GLES_common/yagl_gles_calls.c
GLES_common/yagl_gles_context.c
GLES_common/yagl_gles_context.h
GLES_common/yagl_gles_pixel_formats.c
GLES_common/yagl_gles_texture.c
GLES_common/yagl_gles_texture.h
GLESv1_CM/yagl_gles1_context.c
GLESv2/yagl_gles2_calls.c
GLESv2/yagl_gles2_context.c

index 2c55c8321a64cb79d9185fa77de84916ac97b343..8a655b964398c67f8981c67657b7946e372ec168 100644 (file)
@@ -839,7 +839,8 @@ YAGL_API void glCopyTexImage2D(GLenum target,
 
     yagl_gles_texture_set_internalformat(tex_target_state->texture,
                                          internalformat,
-                                         (is_float ? GL_FLOAT : 0));
+                                         (is_float ? GL_FLOAT : 0),
+                                         yagl_gles_context_convert_textures(ctx));
 
 out:
     YAGL_LOG_FUNC_EXIT(NULL);
@@ -2170,7 +2171,8 @@ YAGL_API void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLs
 
     yagl_gles_texture_set_internalformat(tex_target_state->texture,
                                          internalformat,
-                                         type);
+                                         type,
+                                         yagl_gles_context_convert_textures(ctx));
 
 out:
     YAGL_LOG_FUNC_EXIT(NULL);
@@ -3000,7 +3002,10 @@ YAGL_API void glTexStorage2D(GLenum target, GLsizei levels, GLenum internalforma
         goto out;
     }
 
-    yagl_gles_texture_set_immutable(tex_target_state->texture, base_internalformat, type);
+    yagl_gles_texture_set_immutable(tex_target_state->texture,
+                                    base_internalformat,
+                                    type,
+                                    yagl_gles_context_convert_textures(ctx));
 
 out:
     YAGL_LOG_FUNC_EXIT(NULL);
index d2c8c35cfa2cd81abb090c7a0bb9c100ec9107d4..b5c071e83d6e7460e47cb5b58d11ac9d4cd7a66f 100644 (file)
@@ -373,6 +373,16 @@ void yagl_gles_context_unbind_vertex_array(struct yagl_gles_context *ctx,
     }
 }
 
+int yagl_gles_context_convert_textures(struct yagl_gles_context *ctx)
+{
+    /*
+     * Currently GLESv1_CM is implemented via legacy context always, so
+     * don't convert textures in this case.
+     */
+    return (ctx->base.client_api != yagl_client_api_gles1) &&
+           (yagl_get_host_gl_version() > yagl_gl_2);
+}
+
 int yagl_gles_context_validate_texture_target(struct yagl_gles_context *ctx,
                                               GLenum target,
                                               yagl_gles_texture_target *texture_target)
@@ -437,27 +447,27 @@ struct yagl_pixel_format
             break;
         }
 
-        if (yagl_get_host_gl_version() <= yagl_gl_2) {
+        if (yagl_gles_context_convert_textures(ctx)) {
             switch (format) {
             case GL_ALPHA:
                 switch (type) {
-                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_ALPHA, GL_ALPHA, GL_UNSIGNED_BYTE);
-                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_ALPHA, GL_ALPHA, GL_FLOAT);
-                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_ALPHA, GL_ALPHA, GL_HALF_FLOAT_OES);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_ALPHA, GL_ALPHA, GL_UNSIGNED_BYTE);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_ALPHA, GL_ALPHA, GL_FLOAT);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_ALPHA, GL_ALPHA, GL_HALF_FLOAT_OES);
                 }
                 break;
             case GL_LUMINANCE:
                 switch (type) {
-                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_LUMINANCE, GL_LUMINANCE, GL_UNSIGNED_BYTE);
-                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_LUMINANCE, GL_LUMINANCE, GL_FLOAT);
-                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_LUMINANCE, GL_LUMINANCE, GL_HALF_FLOAT_OES);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_LUMINANCE, GL_LUMINANCE, GL_UNSIGNED_BYTE);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_LUMINANCE, GL_LUMINANCE, GL_FLOAT);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_LUMINANCE, GL_LUMINANCE, GL_HALF_FLOAT_OES);
                 }
                 break;
             case GL_LUMINANCE_ALPHA:
                 switch (type) {
-                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE);
-                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_FLOAT);
-                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_HALF_FLOAT_OES);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_FLOAT);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_HALF_FLOAT_OES);
                 }
                 break;
             }
@@ -465,23 +475,23 @@ struct yagl_pixel_format
             switch (format) {
             case GL_ALPHA:
                 switch (type) {
-                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_ALPHA, GL_ALPHA, GL_UNSIGNED_BYTE);
-                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_ALPHA, GL_ALPHA, GL_FLOAT);
-                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_ALPHA, GL_ALPHA, GL_HALF_FLOAT_OES);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_ALPHA, GL_ALPHA, GL_UNSIGNED_BYTE);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_ALPHA, GL_ALPHA, GL_FLOAT);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_ALPHA, GL_ALPHA, GL_HALF_FLOAT_OES);
                 }
                 break;
             case GL_LUMINANCE:
                 switch (type) {
-                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_LUMINANCE, GL_LUMINANCE, GL_UNSIGNED_BYTE);
-                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_LUMINANCE, GL_LUMINANCE, GL_FLOAT);
-                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_LUMINANCE, GL_LUMINANCE, GL_HALF_FLOAT_OES);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_LUMINANCE, GL_LUMINANCE, GL_UNSIGNED_BYTE);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_LUMINANCE, GL_LUMINANCE, GL_FLOAT);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_LUMINANCE, GL_LUMINANCE, GL_HALF_FLOAT_OES);
                 }
                 break;
             case GL_LUMINANCE_ALPHA:
                 switch (type) {
-                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE);
-                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_FLOAT);
-                YAGL_PIXEL_FORMAT_CASE(gles_gl3, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_HALF_FLOAT_OES);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_FLOAT);
+                YAGL_PIXEL_FORMAT_CASE(gles_gl2, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_HALF_FLOAT_OES);
                 }
                 break;
             }
@@ -598,17 +608,19 @@ int yagl_gles_context_validate_copyteximage_format(struct yagl_gles_context *ctx
             goto out;
         }
 
-        if (yagl_get_host_gl_version() <= yagl_gl_2) {
+        if (yagl_gles_context_convert_textures(ctx)) {
             switch (*internalformat) {
             case GL_ALPHA:
             case GL_LUMINANCE_ALPHA:
                 if (readbuffer_format_num_components == 4) {
+                    *internalformat = GL_RGBA;
                     res = 1;
                     goto out;
                 }
                 break;
             case GL_LUMINANCE:
                 res = 1;
+                *internalformat = GL_RGBA;
                 goto out;
             }
         } else {
@@ -616,14 +628,12 @@ int yagl_gles_context_validate_copyteximage_format(struct yagl_gles_context *ctx
             case GL_ALPHA:
             case GL_LUMINANCE_ALPHA:
                 if (readbuffer_format_num_components == 4) {
-                    *internalformat = GL_RGBA;
                     res = 1;
                     goto out;
                 }
                 break;
             case GL_LUMINANCE:
                 res = 1;
-                *internalformat = GL_RGBA;
                 goto out;
             }
         }
@@ -684,21 +694,24 @@ int yagl_gles_context_validate_texstorage_format(struct yagl_gles_context *ctx,
         goto out;
     }
 
-    if (yagl_get_host_gl_version() <= yagl_gl_2) {
+    if (yagl_gles_context_convert_textures(ctx)) {
         switch (*internalformat) {
         case GL_ALPHA:
+            *internalformat = GL_RGBA;
             *base_internalformat = GL_ALPHA;
-            *any_format = GL_ALPHA;
+            *any_format = GL_BGRA;
             *any_type = GL_UNSIGNED_BYTE;
             break;
         case GL_LUMINANCE:
+            *internalformat = GL_RGBA;
             *base_internalformat = GL_LUMINANCE;
-            *any_format = GL_LUMINANCE;
+            *any_format = GL_BGRA;
             *any_type = GL_UNSIGNED_BYTE;
             break;
         case GL_LUMINANCE_ALPHA:
+            *internalformat = GL_RGBA;
             *base_internalformat = GL_LUMINANCE_ALPHA;
-            *any_format = GL_LUMINANCE_ALPHA;
+            *any_format = GL_BGRA;
             *any_type = GL_UNSIGNED_BYTE;
             break;
         default:
@@ -711,21 +724,18 @@ int yagl_gles_context_validate_texstorage_format(struct yagl_gles_context *ctx,
     } else {
         switch (*internalformat) {
         case GL_ALPHA:
-            *internalformat = GL_RGBA;
             *base_internalformat = GL_ALPHA;
-            *any_format = GL_BGRA;
+            *any_format = GL_ALPHA;
             *any_type = GL_UNSIGNED_BYTE;
             break;
         case GL_LUMINANCE:
-            *internalformat = GL_RGBA;
             *base_internalformat = GL_LUMINANCE;
-            *any_format = GL_BGRA;
+            *any_format = GL_LUMINANCE;
             *any_type = GL_UNSIGNED_BYTE;
             break;
         case GL_LUMINANCE_ALPHA:
-            *internalformat = GL_RGBA;
             *base_internalformat = GL_LUMINANCE_ALPHA;
-            *any_format = GL_BGRA;
+            *any_format = GL_LUMINANCE_ALPHA;
             *any_type = GL_UNSIGNED_BYTE;
             break;
         default:
index 58245c0214ffdd99c5c99d4f4c477dc8f2cbfd54..39e192d4fc4c7e95073bd8d3ec37c7e4f7bb1b56 100644 (file)
@@ -244,6 +244,8 @@ void yagl_gles_context_bind_vertex_array(struct yagl_gles_context *ctx,
 void yagl_gles_context_unbind_vertex_array(struct yagl_gles_context *ctx,
                                            yagl_object_name va_local_name);
 
+int yagl_gles_context_convert_textures(struct yagl_gles_context *ctx);
+
 int yagl_gles_context_validate_texture_target(struct yagl_gles_context *ctx,
                                               GLenum target,
                                               yagl_gles_texture_target *texture_target);
index 4467a248f045e47ac2fac8d28c0cd2a48533c0a5..8decd2da680cabcbfc275c0b96ce7d4d69da5812 100644 (file)
@@ -23,7 +23,7 @@ static void yagl_convert_alpha_ub_bgra_ub(const GLvoid *src,
 
     for (i = 0; i < height; ++i) {
         for (j = 0; j < width; ++j) {
-            *(uint32_t*)(dst + j * 4) = ((uint32_t)(*(uint8_t*)(src + j)) << 24) | 0xFFFFFF;
+            *(uint32_t*)(dst + j * 4) = ((uint32_t)(*(uint8_t*)(src + j)) << 24);
         }
         src += src_stride;
         dst += dst_stride;
@@ -59,9 +59,9 @@ static void yagl_convert_alpha_f_bgra_f(const GLvoid *src,
 
     for (i = 0; i < height; ++i) {
         for (j = 0; j < width; ++j) {
-            *(GLfloat*)(dst + j * 16 + 0) = 1.0f;
-            *(GLfloat*)(dst + j * 16 + 4) = 1.0f;
-            *(GLfloat*)(dst + j * 16 + 8) = 1.0f;
+            *(GLfloat*)(dst + j * 16 + 0) = 0.0f;
+            *(GLfloat*)(dst + j * 16 + 4) = 0.0f;
+            *(GLfloat*)(dst + j * 16 + 8) = 0.0f;
             *(uint32_t*)(dst + j * 16 + 12) = *(uint32_t*)(src + j * 4);
         }
         src += src_stride;
@@ -98,9 +98,9 @@ static void yagl_convert_alpha_hf_bgra_hf(const GLvoid *src,
 
     for (i = 0; i < height; ++i) {
         for (j = 0; j < width; ++j) {
-            *(uint16_t*)(dst + j * 8 + 0) = YAGL_HALF_FLOAT_1_0;
-            *(uint16_t*)(dst + j * 8 + 2) = YAGL_HALF_FLOAT_1_0;
-            *(uint16_t*)(dst + j * 8 + 4) = YAGL_HALF_FLOAT_1_0;
+            *(uint16_t*)(dst + j * 8 + 0) = 0;
+            *(uint16_t*)(dst + j * 8 + 2) = 0;
+            *(uint16_t*)(dst + j * 8 + 4) = 0;
             *(uint16_t*)(dst + j * 8 + 6) = *(uint16_t*)(src + j * 2);
         }
         src += src_stride;
index 5b825bc08ce856c5396c2e659134441cd4b9914a..dc0f0dd1311c7a67f0b94bbdde4fe12f65566385 100644 (file)
  */
 #define GL_HALF_FLOAT_OES 0x8D61
 
-static void yagl_gles_texture_set_swizzle(struct yagl_gles_texture *texture,
-                                          GLenum internalformat)
+static void yagl_gles_texture_swizzle(struct yagl_gles_texture *texture,
+                                      GLenum internalformat)
 {
-    if (yagl_get_host_gl_version() > yagl_gl_2) {
-        switch (internalformat) {
-        case GL_ALPHA:
-            yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_R, GL_ONE);
-            yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_G, GL_ONE);
-            yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_B, GL_ONE);
-            yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_A, GL_ALPHA);
-            break;
-        case GL_LUMINANCE:
-            yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_R, GL_RED);
-            yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_G, GL_RED);
-            yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_B, GL_RED);
-            yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_A, GL_ONE);
-            break;
-        case GL_LUMINANCE_ALPHA:
-            yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_R, GL_RED);
-            yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_G, GL_RED);
-            yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_B, GL_RED);
-            yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_A, GL_ALPHA);
-            break;
-        }
+    switch (internalformat) {
+    case GL_ALPHA:
+        yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_R, GL_ZERO);
+        yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_G, GL_ZERO);
+        yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_B, GL_ZERO);
+        yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_A, GL_ALPHA);
+        break;
+    case GL_LUMINANCE:
+        yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_R, GL_RED);
+        yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_G, GL_RED);
+        yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_B, GL_RED);
+        yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_A, GL_ONE);
+        break;
+    case GL_LUMINANCE_ALPHA:
+        yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_R, GL_RED);
+        yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_G, GL_RED);
+        yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_B, GL_RED);
+        yagl_host_glTexParameteri(texture->target, GL_TEXTURE_SWIZZLE_A, GL_ALPHA);
+        break;
     }
 }
 
@@ -107,7 +105,8 @@ int yagl_gles_texture_bind(struct yagl_gles_texture *texture,
 
 void yagl_gles_texture_set_internalformat(struct yagl_gles_texture *texture,
                                           GLenum internalformat,
-                                          GLenum type)
+                                          GLenum type,
+                                          int swizzle)
 {
     texture->internalformat = internalformat;
 
@@ -122,12 +121,15 @@ void yagl_gles_texture_set_internalformat(struct yagl_gles_texture *texture,
         break;
     }
 
-    yagl_gles_texture_set_swizzle(texture, internalformat);
+    if (swizzle) {
+        yagl_gles_texture_swizzle(texture, internalformat);
+    }
 }
 
 void yagl_gles_texture_set_immutable(struct yagl_gles_texture *texture,
                                      GLenum internalformat,
-                                     GLenum type)
+                                     GLenum type,
+                                     int swizzle)
 {
     texture->immutable = GL_TRUE;
     texture->internalformat = internalformat;
@@ -143,7 +145,9 @@ void yagl_gles_texture_set_immutable(struct yagl_gles_texture *texture,
         break;
     }
 
-    yagl_gles_texture_set_swizzle(texture, internalformat);
+    if (swizzle) {
+        yagl_gles_texture_swizzle(texture, internalformat);
+    }
 }
 
 int yagl_gles_texture_color_renderable(struct yagl_gles_texture *texture)
index d46a48736e00938f86938805339bdfdd7fb2cfe9..6d1597bbbdf080b914b42ba35544c9b485b918ca 100644 (file)
@@ -56,11 +56,13 @@ int yagl_gles_texture_bind(struct yagl_gles_texture *texture,
 
 void yagl_gles_texture_set_internalformat(struct yagl_gles_texture *texture,
                                           GLenum internalformat,
-                                          GLenum type);
+                                          GLenum type,
+                                          int swizzle);
 
 void yagl_gles_texture_set_immutable(struct yagl_gles_texture *texture,
                                      GLenum internalformat,
-                                     GLenum type);
+                                     GLenum type,
+                                     int swizzle);
 
 int yagl_gles_texture_color_renderable(struct yagl_gles_texture *texture);
 
index ec2465e4baab592a34c03b3d632bbccf81ba3c6f..4f14c942b8c0ae005408e25732bc664ffadbcf85 100644 (file)
@@ -594,7 +594,8 @@ static void yagl_gles1_cpal_tex_uncomp_and_apply(struct yagl_gles_context *ctx,
 
         yagl_gles_texture_set_internalformat(texture,
                                              fmt_desc->uncomp_format,
-                                             fmt_desc->pixel_type);
+                                             fmt_desc->pixel_type,
+                                             yagl_gles_context_convert_textures(ctx));
 
         return;
     }
@@ -669,7 +670,8 @@ static void yagl_gles1_cpal_tex_uncomp_and_apply(struct yagl_gles_context *ctx,
 
     yagl_gles_texture_set_internalformat(texture,
                                          fmt_desc->uncomp_format,
-                                         fmt_desc->pixel_type);
+                                         fmt_desc->pixel_type,
+                                         yagl_gles_context_convert_textures(ctx));
 }
 
 static void yagl_gles1_etc1_rgb8_uncomp_and_apply(struct yagl_gles_context *ctx,
@@ -706,7 +708,8 @@ static void yagl_gles1_etc1_rgb8_uncomp_and_apply(struct yagl_gles_context *ctx,
 
         yagl_gles_texture_set_internalformat(texture,
                                              GL_RGBA8,
-                                             GL_UNSIGNED_BYTE);
+                                             GL_UNSIGNED_BYTE,
+                                             yagl_gles_context_convert_textures(ctx));
 
         return;
     }
@@ -737,7 +740,8 @@ static void yagl_gles1_etc1_rgb8_uncomp_and_apply(struct yagl_gles_context *ctx,
 
     yagl_gles_texture_set_internalformat(texture,
                                          GL_RGBA8,
-                                         GL_UNSIGNED_BYTE);
+                                         GL_UNSIGNED_BYTE,
+                                         yagl_gles_context_convert_textures(ctx));
 }
 
 static void yagl_gles1_context_compressed_tex_image_2d(struct yagl_gles_context *ctx,
index 008cf0f2fa6b2cfec8d85acdf2dcfbd229d0944a..9c2d4296e7ce7e43bf716d16cef53ecf77f9987f 100644 (file)
@@ -2391,7 +2391,8 @@ YAGL_API void glTexImage3D(GLenum target, GLint level, GLint internalformat, GLs
 
     yagl_gles_texture_set_internalformat(tex_target_state->texture,
                                          internalformat,
-                                         type);
+                                         type,
+                                         yagl_gles_context_convert_textures(&ctx->base));
 
 out:
     YAGL_LOG_FUNC_EXIT(NULL);
@@ -2755,7 +2756,10 @@ YAGL_API void glTexStorage3D(GLenum target, GLsizei levels, GLenum internalforma
         goto out;
     }
 
-    yagl_gles_texture_set_immutable(tex_target_state->texture, base_internalformat, type);
+    yagl_gles_texture_set_immutable(tex_target_state->texture,
+                                    base_internalformat,
+                                    type,
+                                    yagl_gles_context_convert_textures(&ctx->base));
 
 out:
     YAGL_LOG_FUNC_EXIT(NULL);
index ddb9bcbb3263e65bfc1c6208202ddb4a19dc328c..61c412f5c35a38a2a40fdcf71403e0aea9babe56 100644 (file)
@@ -636,7 +636,8 @@ void yagl_gles2_context_compressed_tex_image_2d(struct yagl_gles_context *gles_c
 
         yagl_gles_texture_set_internalformat(texture,
                                              tc_format->dst_internalformat,
-                                             tc_format->dst_type);
+                                             tc_format->dst_type,
+                                             yagl_gles_context_convert_textures(gles_ctx));
 
         return;
     }
@@ -668,7 +669,8 @@ void yagl_gles2_context_compressed_tex_image_2d(struct yagl_gles_context *gles_c
 
     yagl_gles_texture_set_internalformat(texture,
                                          tc_format->dst_internalformat,
-                                         tc_format->dst_type);
+                                         tc_format->dst_type,
+                                         yagl_gles_context_convert_textures(gles_ctx));
 }
 
 void yagl_gles2_context_compressed_tex_sub_image_2d(struct yagl_gles_context *gles_ctx,
@@ -819,7 +821,8 @@ void yagl_gles2_context_compressed_tex_image_3d(struct yagl_gles2_context *ctx,
 
         yagl_gles_texture_set_internalformat(texture,
                                              tc_format->dst_internalformat,
-                                             tc_format->dst_type);
+                                             tc_format->dst_type,
+                                             yagl_gles_context_convert_textures(&ctx->base));
 
         return;
     }
@@ -856,7 +859,8 @@ void yagl_gles2_context_compressed_tex_image_3d(struct yagl_gles2_context *ctx,
 
     yagl_gles_texture_set_internalformat(texture,
                                          tc_format->dst_internalformat,
-                                         tc_format->dst_type);
+                                         tc_format->dst_type,
+                                         yagl_gles_context_convert_textures(&ctx->base));
 }
 
 void yagl_gles2_context_compressed_tex_sub_image_3d(struct yagl_gles2_context *ctx,