nuclear@2: #include nuclear@2: #include nuclear@3: #include nuclear@1: #include "opengl.h" nuclear@0: #include "istereo.h" nuclear@2: #include "sanegl.h" nuclear@2: #include "sdr.h" nuclear@4: #include "respath.h" nuclear@4: nuclear@6: void dbg_draw(void); nuclear@4: static unsigned int get_shader_program(const char *vfile, const char *pfile); nuclear@2: nuclear@2: unsigned int prog; nuclear@0: nuclear@0: int init(void) nuclear@0: { nuclear@4: add_resource_path("sdr"); nuclear@3: nuclear@4: if(!(prog = get_shader_program("test.v.glsl", "test.p.glsl"))) { nuclear@2: fprintf(stderr, "failed to load shader program\n"); nuclear@2: return -1; nuclear@2: } nuclear@0: return 0; nuclear@0: } nuclear@0: nuclear@0: void cleanup(void) nuclear@0: { nuclear@2: free_program(prog); nuclear@0: } nuclear@0: nuclear@0: void redraw(void) nuclear@0: { nuclear@5: glClearColor(0.4, 0.6, 1.0, 1.0); nuclear@0: glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); nuclear@2: nuclear@2: bind_program(prog); nuclear@2: nuclear@2: gl_matrix_mode(GL_MODELVIEW); nuclear@2: gl_load_identity(); nuclear@2: gl_translatef(0, 0, -8); nuclear@2: nuclear@6: dbg_draw(); nuclear@6: nuclear@9: /*gl_begin(GL_QUADS); nuclear@2: gl_color3f(1, 0, 0); nuclear@2: gl_vertex3f(-1, -1, 0); nuclear@2: gl_color3f(0, 1, 0); nuclear@2: gl_vertex3f(1, -1, 0); nuclear@2: gl_color3f(0, 0, 1); nuclear@2: gl_vertex3f(1, 1, 0); nuclear@2: gl_color3f(1, 1, 0); nuclear@2: gl_vertex3f(-1, 1, 0); nuclear@9: gl_end();*/ nuclear@2: nuclear@2: assert(glGetError() == GL_NO_ERROR); nuclear@0: } nuclear@2: nuclear@2: void reshape(int x, int y) nuclear@2: { nuclear@2: glViewport(0, 0, x, y); nuclear@2: nuclear@2: gl_matrix_mode(GL_PROJECTION); nuclear@2: gl_load_identity(); nuclear@2: glu_perspective(45.0, (float)x / (float)y, 1.0, 1000.0); nuclear@2: } nuclear@4: nuclear@4: static unsigned int get_shader_program(const char *vfile, const char *pfile) nuclear@4: { nuclear@4: unsigned int prog, vs, ps; nuclear@4: nuclear@4: if(!(vs = get_vertex_shader(find_resource(vfile, 0, 0)))) { nuclear@4: return -1; nuclear@4: } nuclear@4: if(!(ps = get_pixel_shader(find_resource(pfile, 0, 0)))) { nuclear@4: return -1; nuclear@4: } nuclear@4: nuclear@4: if(!(prog = create_program_link(vs, ps))) { nuclear@4: return -1; nuclear@4: } nuclear@10: nuclear@10: glBindAttribLocation(prog, 0, "attr_vertex"); nuclear@10: glBindAttribLocation(prog, 1, "attr_color"); nuclear@10: glLinkProgram(prog); nuclear@10: nuclear@4: return prog; nuclear@4: } nuclear@6: nuclear@6: void dbg_draw(void) nuclear@6: { nuclear@9: static const GLfloat squareVertices[] = { nuclear@9: -0.5f, -0.33f, nuclear@9: 0.5f, -0.33f, nuclear@9: -0.5f, 0.33f, nuclear@9: 0.5f, 0.33f, nuclear@9: }; nuclear@9: nuclear@9: static const GLubyte squareColors[] = { nuclear@9: 255, 255, 0, 255, nuclear@9: 0, 255, 255, 255, nuclear@9: 0, 0, 0, 0, nuclear@9: 255, 0, 255, 255, nuclear@9: }; nuclear@9: nuclear@6: int vloc, cloc; nuclear@6: nuclear@9: glUseProgram(prog); nuclear@9: nuclear@6: gl_apply_xform(prog); nuclear@6: nuclear@10: vloc = 0;//glGetAttribLocation(prog, "attr_vertex"); nuclear@10: cloc = 1;//glGetAttribLocation(prog, "attr_color"); nuclear@9: assert(vloc >= 0 && cloc >= 0); nuclear@6: nuclear@9: glVertexAttribPointer(vloc, 2, GL_FLOAT, 0, 0, squareVertices); nuclear@9: glEnableVertexAttribArray(vloc); nuclear@9: glVertexAttribPointer(cloc, 4, GL_UNSIGNED_BYTE, 1, 0, squareColors); nuclear@9: glEnableVertexAttribArray(cloc); nuclear@8: nuclear@9: glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); nuclear@6: nuclear@6: glDisableVertexAttribArray(vloc); nuclear@6: glDisableVertexAttribArray(cloc); nuclear@6: }