void prepare_shader(void) { // build the shader program vert = shader_load(GL_VERTEX_SHADER, "data/render.vert"); frag = shader_load(GL_FRAGMENT_SHADER, "data/render.frag"); prog = glCreateProgram(); glAttachShader(prog, vert); glAttachShader(prog, frag); glLinkProgram(prog); GLint param; glGetProgramiv(prog, GL_LINK_STATUS, ¶m); printf("*** Shader linking %s.\n", param == GL_FALSE ? "went as expected" : "worked"); printProgramInfoLog(prog); // prepare uniforms etc for the shader s_angle = glGetUniformLocation(prog, "angle"); s_pos = glGetUniformLocation(prog, "position"); s_pixelarc = glGetUniformLocation(prog, "pixel_arc"); s_fovdepth = glGetUniformLocation(prog, "fovdepth"); s_bPool = glGetUniformLocation(prog, "bPool"); s_nPool = glGetUniformLocation(prog, "nPool"); // s_now = glGetUniformLocation(prog, "now"); // glUniform1i(s_now, now); glUniformui64NV(s_nPool, nodepool_devptr); // glUniform1i(s_bPool, 0); // glMakeBufferNonResidentNV(GL_ARRAY_BUFFER_ARB); }
void voxel_draw(void) { if(keys[KEY_R]) { keys[KEY_R] = 0; printf("Reloading shader.\n"); glDeleteShader(vert); glDeleteShader(frag); glDeleteProgram(prog); prepare_shader(); } // killme=1; // float3 pos, normal; // pos.x = 0.5 + sin(px)*pz; // pos.y = 0.5; // pos.z = 0.5 + cos(px)*pz; // pos.x = px; pos.y = py; pos.z = pz; // glUseProgram(0); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_3D, brick_tex); glBindBuffer(GL_ARRAY_BUFFER, node_pool); glUseProgram(prog); // glUniform1f(s_fovdepth, tan(radians(fov)*0.5)*0.5); // glUniform1f(s_width, sin(radians(fov)/(float)vid_width)); glUniform3f(s_angle, angle.x, angle.y, angle.z); glUniform3f(s_pos, pos.x, pos.y, pos.z); glUniformui64NV(s_nPool, nodepool_devptr); // glTranslatef(0, ((float)vid_height/(float)vid_width)*0.5-0.5 , 0); glBegin(GL_QUADS); glNormal3f(0,0,-1); // glColor3f(0,0,1); glTexCoord3f(0,0,0); glVertex3f(0,0,0); // glColor3f(1,0,1); glTexCoord3f(1,0,0); glVertex3f(1,0,0); // glColor3f(1,1,1); glTexCoord3f(1,1,0); glVertex3f(1,1,0); // glColor3f(0,1,1); glTexCoord3f(0,1,0); glVertex3f(0,1,0); glEnd(); glUseProgram(0); now ++; // everyone in /r/opengl is crying at this point. }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_NVShaderBufferLoad_glUniformui64NV(JNIEnv *__env, jclass clazz, jint location, jlong value) { glUniformui64NVPROC glUniformui64NV = (glUniformui64NVPROC)tlsGetFunction(2108); UNUSED_PARAM(clazz) glUniformui64NV(location, value); }