From b7c239243c7ffac5c55be98625a61f03fece080b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Sun, 30 Oct 2011 10:31:50 +0000 Subject: [PATCH] Test for GREMEDY support. --- apps/gl/.gitignore | 1 + apps/gl/CMakeLists.txt | 21 ++--- apps/gl/gremedy.c | 187 ++++++++++++++++++++++++++++++++++++++++ apps/gl/gremedy.ref.txt | 20 +++++ apps/gl/tri.c | 4 +- driver.py | 4 +- 6 files changed, 223 insertions(+), 14 deletions(-) create mode 100644 apps/gl/gremedy.c create mode 100644 apps/gl/gremedy.ref.txt diff --git a/apps/gl/.gitignore b/apps/gl/.gitignore index 0c42c31..0a824f1 100644 --- a/apps/gl/.gitignore +++ b/apps/gl/.gitignore @@ -1 +1,2 @@ +gremedy tri diff --git a/apps/gl/CMakeLists.txt b/apps/gl/CMakeLists.txt index 925261c..3d60f1e 100644 --- a/apps/gl/CMakeLists.txt +++ b/apps/gl/CMakeLists.txt @@ -1,25 +1,26 @@ include_directories ( - ${OPENGL_INCLUDE_PATH} - ${GLUT_INCLUDE_DIR} - ${GLEW_INCLUDE_DIR} + ${OPENGL_INCLUDE_PATH} + ${GLUT_INCLUDE_DIR} + ${GLEW_INCLUDE_DIR} ) link_libraries ( - ${GLUT_glut_LIBRARY} - ${GLEW_glew_LIBRARY} - ${OPENGL_glu_LIBRARY} - ${OPENGL_gl_LIBRARY} + ${GLUT_glut_LIBRARY} + ${GLEW_glew_LIBRARY} + ${OPENGL_glu_LIBRARY} + ${OPENGL_gl_LIBRARY} ) set (subdir gl) set (targets - tri + tri + gremedy ) foreach (target ${targets}) - add_executable (${subdir}_${target} ${target}.c) - set_target_properties (${subdir}_${target} PROPERTIES OUTPUT_NAME ${target}) + add_executable (${subdir}_${target} ${target}.c) + set_target_properties (${subdir}_${target} PROPERTIES OUTPUT_NAME ${target}) add_test( NAME ${subdir}_${target} diff --git a/apps/gl/gremedy.c b/apps/gl/gremedy.c new file mode 100644 index 0000000..0f6597a --- /dev/null +++ b/apps/gl/gremedy.c @@ -0,0 +1,187 @@ +/* + * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the name of + * Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF + * ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + + +#ifdef _WIN32 +#include +#endif + +#include +#include +#include + +#include +#ifdef __APPLE__ +# include +# include +#else +# include +# include +#endif + + +static int win; + + +static void checkGlError(const char *call) { + GLenum error = glGetError(); + if (error != GL_NO_ERROR) { + fprintf(stderr, "error: %s -> %s\n", call, gluErrorString(error)); + exit(1); + } +} + +static void Init(void) +{ + const GLubyte *extensions; + GLboolean has_GL_GREMEDY_string_marker; + GLboolean has_GL_GREMEDY_frame_terminator; + + extensions = glGetString(GL_EXTENSIONS); + checkGlError("glGetString(GL_EXTENSIONS)"); + has_GL_GREMEDY_string_marker = gluCheckExtension("GL_GREMEDY_string_marker", extensions); + has_GL_GREMEDY_frame_terminator = gluCheckExtension("GL_GREMEDY_string_marker", extensions); + + if (GLEW_VERSION_3_0) { + GLint has_GL3_GREMEDY_string_marker = 0; + GLint has_GL3_GREMEDY_frame_terminator = 0; + GLint i; + + GLint num_extensions = 0; + glGetIntegerv(GL_NUM_EXTENSIONS, &num_extensions); + checkGlError("glGetIntegerv(GL_NUM_EXTENSIONS)"); + + for (i = 0; i < num_extensions; ++i) { + const char *extension; + + extension = (const char *)glGetStringi(GL_EXTENSIONS, i); + checkGlError("glGetStringi(GL_EXTENSIONS, i)"); + + if (strlen(extension) == 0) { + fprintf(stderr, "error: glGetStringi returned empty string\n"); + exit(1); + } + + if (strcmp(extension, "GL_GREMEDY_string_marker_count") == 0) { + ++has_GL3_GREMEDY_string_marker; + } + + if (strcmp(extension, "GL_GREMEDY_frame_terminator") == 0) { + ++has_GL3_GREMEDY_frame_terminator; + } + } + + if (!!has_GL_GREMEDY_string_marker != !!has_GL3_GREMEDY_string_marker) { + fprintf(stderr, "error: GL_GREMEDY_string_marker not consistently supported by GL3\n"); + exit(1); + } + + if (!!has_GL_GREMEDY_frame_terminator != !!has_GL3_GREMEDY_frame_terminator) { + fprintf(stderr, "error: GL_GREMEDY_frame_terminator not consistently supported by GL3\n"); + exit(1); + } + } + + glewInit(); + + if (!!has_GL_GREMEDY_string_marker != !!GLEW_GREMEDY_string_marker) { + fprintf(stderr, "error: GL_GREMEDY_string_marker not consistently supported by GLEW\n"); + exit(1); + } + + if (!!has_GL_GREMEDY_frame_terminator != !!GLEW_GREMEDY_frame_terminator) { + fprintf(stderr, "error: GL_GREMEDY_frame_terminator not consistently supported by GLEW\n"); + exit(1); + } + + if (GLEW_GREMEDY_string_marker) { + glStringMarkerGREMEDY(strlen("Init"), "Init - this should not be included"); + } + + glClearColor(0.3, 0.1, 0.3, 1.0); +} + +static void Reshape(int width, int height) +{ + if (GLEW_GREMEDY_string_marker) { + glStringMarkerGREMEDY(0, __FUNCTION__); + } + + glViewport(0, 0, (GLint)width, (GLint)height); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); + glMatrixMode(GL_MODELVIEW); +} + +static void Draw(void) +{ + if (GLEW_GREMEDY_string_marker) { + glStringMarkerGREMEDY(0, __FUNCTION__); + } + + glClear(GL_COLOR_BUFFER_BIT); + + glBegin(GL_TRIANGLES); + glColor3f(.8,0,0); + glVertex3f(-0.9, -0.9, -30.0); + glColor3f(0,.9,0); + glVertex3f( 0.9, -0.9, -30.0); + glColor3f(0,0,.7); + glVertex3f( 0.0, 0.9, -30.0); + glEnd(); + + glFlush(); + + if (GLEW_GREMEDY_frame_terminator) { + glFrameTerminatorGREMEDY(); + } + + glutDestroyWindow(win); + + exit(0); +} + +int main(int argc, char **argv) +{ + glutInit(&argc, argv); + + glutInitWindowPosition(0, 0); + glutInitWindowSize(250, 250); + + glutInitDisplayMode(GLUT_RGB | GLUT_ALPHA | GLUT_SINGLE); + + win = glutCreateWindow(*argv); + if (!win) { + exit(1); + } + + Init(); + + glutReshapeFunc(Reshape); + glutDisplayFunc(Draw); + glutMainLoop(); + return 0; +} diff --git a/apps/gl/gremedy.ref.txt b/apps/gl/gremedy.ref.txt new file mode 100644 index 0000000..0fbf8fa --- /dev/null +++ b/apps/gl/gremedy.ref.txt @@ -0,0 +1,20 @@ +glStringMarkerGREMEDY(len = 4, string = "Init") +glClearColor(red = 0.3, green = 0.1, blue = 0.3, alpha = 1) +glStringMarkerGREMEDY(len = 0, string = "Reshape") +glViewport(x = 0, y = 0, width = 250, height = 250) +glMatrixMode(mode = GL_PROJECTION) +glLoadIdentity() +glOrtho(left = -1, right = 1, bottom = -1, top = 1, zNear = -0.5, zFar = 1000) +glMatrixMode(mode = GL_MODELVIEW) +glStringMarkerGREMEDY(len = 0, string = "Draw") +glClear(mask = GL_COLOR_BUFFER_BIT) +glBegin(mode = GL_TRIANGLES) +glColor3f(red = 0.8, green = 0, blue = 0) +glVertex3f(x = -0.9, y = -0.9, z = -30) +glColor3f(red = 0, green = 0.9, blue = 0) +glVertex3f(x = 0.9, y = -0.9, z = -30) +glColor3f(red = 0, green = 0, blue = 0.7) +glVertex3f(x = 0, y = 0.9, z = -30) +glEnd() +glFlush() +glFrameTerminatorGREMEDY() diff --git a/apps/gl/tri.c b/apps/gl/tri.c index ea3b595..db4b4f4 100644 --- a/apps/gl/tri.c +++ b/apps/gl/tri.c @@ -75,7 +75,7 @@ static void Draw(void) if (doubleBuffer) { glutSwapBuffers(); } - + glutDestroyWindow(win); exit(0); @@ -88,7 +88,7 @@ int main(int argc, char **argv) glutInit(&argc, argv); glutInitWindowPosition(0, 0); - glutInitWindowSize( 250, 250); + glutInitWindowSize(250, 250); type = GLUT_RGB | GLUT_ALPHA; type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; diff --git a/driver.py b/driver.py index 7799b65..7f04f24 100755 --- a/driver.py +++ b/driver.py @@ -141,15 +141,15 @@ class TestCase: if function_name in ('glFlush', 'glFinish'): flushes += 1 src_line = line[mo.start(2):] - sys.stdout.write(src_line + '\n') if ref_line: if src_line == ref_line: + sys.stdout.write(src_line + '\n') ref_line = ref.readline().rstrip() p.wait() if p.returncode != 0: self.fail('tracedump returned code %i' % p.returncode) if ref_line: - self.fail('missing call %' % ref_line) + self.fail('missing call %s' % ref_line) def run(self): self.standalone() -- 2.43.0