From: José Fonseca Date: Mon, 8 Apr 2013 18:46:02 +0000 (+0100) Subject: Add a tri glsl sample. X-Git-Url: https://git.cworth.org/git?p=apitrace-tests;a=commitdiff_plain;h=dc6ab389f14bf38b2e6df500aacd52a5ab999cc5;hp=a79d84589687bf0d651067a8e75370dd6a8ec7b7 Add a tri glsl sample. --- diff --git a/apps/gl/.gitignore b/apps/gl/.gitignore index 522615b..29550d7 100644 --- a/apps/gl/.gitignore +++ b/apps/gl/.gitignore @@ -1,4 +1,5 @@ gremedy map_buffer tri +tri_glsl varray diff --git a/apps/gl/CMakeLists.txt b/apps/gl/CMakeLists.txt index 6344566..9ea0fc6 100644 --- a/apps/gl/CMakeLists.txt +++ b/apps/gl/CMakeLists.txt @@ -35,6 +35,7 @@ add_app_test ( set (targets tri + tri_glsl gremedy varray map_buffer diff --git a/apps/gl/tri.c b/apps/gl/tri.c index baff024..faa794b 100644 --- a/apps/gl/tri.c +++ b/apps/gl/tri.c @@ -41,6 +41,7 @@ static GLboolean doubleBuffer = GL_TRUE; static int win; + static void parseArgs(int argc, char** argv) { int i; @@ -58,32 +59,36 @@ static void parseArgs(int argc, char** argv) } } -static void Init(void) -{ - glClearColor(0.3, 0.1, 0.3, 1.0); -} -static void Reshape(int width, int height) +static void +Init(void) { + glClearColor(0.3f, 0.1f, 0.3f, 1.0f); +} - glViewport(0, 0, (GLint)width, (GLint)height); +static void +Reshape(int width, int height) +{ + glViewport(0, 0, width, 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) + +static void +Draw(void) { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); - glColor3f(.8,0,0); + glColor3f(.8, 0, 0); glVertex3f(-0.9, -0.9, -30.0); - glColor3f(0,.9,0); + glColor3f(0, .9, 0); glVertex3f( 0.9, -0.9, -30.0); - glColor3f(0,0,.7); + glColor3f(0, 0, .7); glVertex3f( 0.0, 0.9, -30.0); glEnd(); @@ -98,7 +103,9 @@ static void Draw(void) exit(0); } -int main(int argc, char **argv) + +int +main(int argc, char **argv) { GLenum type; diff --git a/apps/gl/tri_glsl.c b/apps/gl/tri_glsl.c new file mode 100644 index 0000000..741aece --- /dev/null +++ b/apps/gl/tri_glsl.c @@ -0,0 +1,154 @@ +/* Test fragment shader + * + * Brian Pau + */ + +#ifdef _WIN32 +#include +#endif + +#include +#include +#include +#include +#include + +#include +#ifdef __APPLE__ +# include +#else +# include +#endif + + +static GLuint fragShader; +static GLuint vertShader; +static GLuint program; +static GLint win = 0; +static GLfloat xpos = 0, ypos = 0; + + +static void +LoadAndCompileShader(GLuint shader, const char *text) +{ + const GLint length = -1; + GLint stat; + + glShaderSource(shader, 1, (const GLchar **) &text, &length); + + glCompileShader(shader); + + glGetShaderiv(shader, GL_COMPILE_STATUS, &stat); + if (!stat) { + GLchar log[1000]; + GLsizei len; + glGetShaderInfoLog(shader, 1000, &len, log); + fprintf(stderr, "fslight: problem compiling shader:\n%s\n", log); + exit(1); + } +} + + +static void +CheckLink(GLuint prog) +{ + GLint stat; + glGetProgramiv(prog, GL_LINK_STATUS, &stat); + if (!stat) { + GLchar log[1000]; + GLsizei len; + glGetProgramInfoLog(prog, 1000, &len, log); + fprintf(stderr, "Linker error:\n%s\n", log); + } +} + + +static void +Init(void) +{ + static const char *fragShaderText = + "void main() {\n" + " gl_FragColor = gl_Color; \n" + "}\n"; + static const char *vertShaderText = + "void main() {\n" + " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" + " gl_FrontColor = gl_Color;\n" + "}\n"; + + if (!GLEW_VERSION_2_0) { + printf("This program requires OpenGL 2.x\n"); + exit(1); + } + + fragShader = glCreateShader(GL_FRAGMENT_SHADER); + LoadAndCompileShader(fragShader, fragShaderText); + + vertShader = glCreateShader(GL_VERTEX_SHADER); + LoadAndCompileShader(vertShader, vertShaderText); + + program = glCreateProgram(); + glAttachShader(program, fragShader); + glAttachShader(program, vertShader); + glLinkProgram(program); + CheckLink(program); + glUseProgram(program); + + assert(glGetError() == 0); + + glClearColor(0.3f, 0.1f, 0.3f, 1.0f); +} + + +static void +Reshape(int width, int height) +{ + glViewport(0, 0, width, 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) +{ + 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(); + + glutSwapBuffers(); + + glDeleteShader(fragShader); + glDeleteShader(vertShader); + glDeleteProgram(program); + glutDestroyWindow(win); + + exit(0); +} + + +int +main(int argc, char **argv) +{ + glutInit(&argc, argv); + glutInitWindowSize(250, 250); + glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); + win = glutCreateWindow(argv[0]); + glewInit(); + glutReshapeFunc(Reshape); + glutDisplayFunc(Draw); + Init(); + glutMainLoop(); + return 0; +} diff --git a/apps/gl/tri_glsl.ref.txt b/apps/gl/tri_glsl.ref.txt new file mode 100644 index 0000000..680e7c1 --- /dev/null +++ b/apps/gl/tri_glsl.ref.txt @@ -0,0 +1,41 @@ +glCreateShader(type = GL_FRAGMENT_SHADER) = 1 +glShaderSource(shader = 1, count = 1, string = &"void main() { + gl_FragColor = gl_Color; +} +", length = &-1) +glCompileShader(shader = 1) +glGetShaderiv(shader = 1, pname = GL_COMPILE_STATUS, params = &1) +glCreateShader(type = GL_VERTEX_SHADER) = 2 +glShaderSource(shader = 2, count = 1, string = &"void main() { + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_FrontColor = gl_Color; +} +", length = &-1) +glCompileShader(shader = 2) +glGetShaderiv(shader = 2, pname = GL_COMPILE_STATUS, params = &1) +glCreateProgram() = 3 +glAttachShader(program = 3, shader = 1) +glAttachShader(program = 3, shader = 2) +glLinkProgram(program = 3) +glGetProgramiv(program = 3, pname = GL_LINK_STATUS, params = &1) +glUseProgram(program = 3) +glClearColor(red = 0.3, green = 0.1, blue = 0.3, alpha = 1) +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) +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() + +glDeleteShader(shader = 1) +glDeleteShader(shader = 2) +glDeleteProgram(program = 3)