[PATCH 09/10] gles: Prepare __gl_image_size for GLES
Chia-I Wu
olvaffe at gmail.com
Tue Nov 8 14:13:19 PST 2011
__gl_image_size queries several GL states that are not available in GLES
contexts. The defaults work for GLES so those queries can be safely skipped.
---
glsize.hpp | 23 +++++++++++++----------
gltrace.py | 8 ++++++++
2 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/glsize.hpp b/glsize.hpp
index 76da8fa..1d1ce45 100644
--- a/glsize.hpp
+++ b/glsize.hpp
@@ -582,7 +582,7 @@ _align(X x, Y y) {
}
static inline size_t
-__gl_image_size(GLenum format, GLenum type, GLsizei width, GLsizei height, GLsizei depth) {
+__gl_image_size(GLenum format, GLenum type, GLsizei width, GLsizei height, GLsizei depth, GLboolean has_unpack_subimage) {
unsigned num_channels = __gl_format_channels(format);
unsigned bits_per_pixel;
@@ -645,12 +645,14 @@ __gl_image_size(GLenum format, GLenum type, GLsizei width, GLsizei height, GLsiz
GLint skip_pixels = 0;
GLint skip_images = 0;
- __glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment);
- __glGetIntegerv(GL_UNPACK_ROW_LENGTH, &row_length);
- __glGetIntegerv(GL_UNPACK_IMAGE_HEIGHT, &image_height);
- __glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skip_rows);
- __glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skip_pixels);
- __glGetIntegerv(GL_UNPACK_SKIP_IMAGES, &skip_images);
+ __glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment);
+ if (has_unpack_subimage) {
+ __glGetIntegerv(GL_UNPACK_ROW_LENGTH, &row_length);
+ __glGetIntegerv(GL_UNPACK_IMAGE_HEIGHT, &image_height);
+ __glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skip_rows);
+ __glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skip_pixels);
+ __glGetIntegerv(GL_UNPACK_SKIP_IMAGES, &skip_images);
+ }
if (row_length <= 0) {
row_length = width;
@@ -682,9 +684,10 @@ __gl_image_size(GLenum format, GLenum type, GLsizei width, GLsizei height, GLsiz
return size;
}
-#define __glTexImage3D_size(format, type, width, height, depth) __gl_image_size(format, type, width, height, depth)
-#define __glTexImage2D_size(format, type, width, height) __gl_image_size(format, type, width, height, 1)
-#define __glTexImage1D_size(format, type, width) __gl_image_size(format, type, width, 1, 1)
+// note that can_unpack_subimage() is generated by gltrace.py
+#define __glTexImage3D_size(format, type, width, height, depth) __gl_image_size(format, type, width, height, depth, can_unpack_subimage())
+#define __glTexImage2D_size(format, type, width, height) __gl_image_size(format, type, width, height, 1, can_unpack_subimage())
+#define __glTexImage1D_size(format, type, width) __gl_image_size(format, type, width, 1, 1, can_unpack_subimage())
#define __glTexSubImage3D_size(format, type, width, height, depth) __glTexImage3D_size(format, type, width, height, depth)
#define __glTexSubImage2D_size(format, type, width, height) __glTexImage2D_size(format, type, width, height)
diff --git a/gltrace.py b/gltrace.py
index 8043e80..c75ac80 100644
--- a/gltrace.py
+++ b/gltrace.py
@@ -319,6 +319,14 @@ class GlTracer(Tracer):
print '}'
print
+ # states such as GL_UNPACK_ROW_LENGTH are not available in GLES
+ print 'static inline bool'
+ print 'can_unpack_subimage(void) {'
+ print ' tracer_context *ctx = __get_context();'
+ print ' return (ctx->profile == PROFILE_COMPAT);'
+ print '}'
+ print
+
array_pointer_function_names = set((
"glVertexPointer",
"glNormalPointer",
--
1.7.6.3
More information about the apitrace
mailing list