void ViewportArrayApplication::Display(bool auto_redraw) { float t = float(GetTickCount() & 0x3FFF) / float(0x3FFF); static const vmath::vec3 X(1.0f, 0.0f, 0.0f); static const vmath::vec3 Y(0.0f, 1.0f, 0.0f); static const vmath::vec3 Z(0.0f, 0.0f, 1.0f); glDisable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClearDepth(1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glUseProgram(sort_prog); vmath::mat4 p(vmath::frustum(-1.0f, 1.0f, aspect, -aspect, 1.0f, 5000.0f)); vmath::mat4 m; m = vmath::mat4(vmath::translate(0.0f, 0.0f, 100.0f * sinf(6.28318531f * t) - 230.0f) * vmath::rotate(360.0f * t, X) * vmath::rotate(360.0f * t * 2.0f, Y) * vmath::rotate(360.0f * t * 5.0f, Z) * vmath::translate(0.0f, -80.0f, 0.0f)); glUniformMatrix4fv(model_matrix_pos, 1, GL_FALSE, m[0]); glUniformMatrix4fv(projection_matrix_pos, 1, GL_FALSE, p); glEnable(GL_RASTERIZER_DISCARD); glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, xfb); glBeginTransformFeedback(GL_POINTS); object.Render(); glEndTransformFeedback(); glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, 0); glDisable(GL_RASTERIZER_DISCARD); static const vmath::vec4 colors[2] = { vmath::vec4(0.8f, 0.8f, 0.9f, 0.5f), vmath::vec4(0.3f, 1.0f, 0.3f, 0.8f) }; glUseProgram(render_prog); glUniform4fv(0, 1, colors[0]); glBindVertexArray(vao[0]); glDrawTransformFeedbackStream(GL_TRIANGLES, xfb, 0); glUniform4fv(0, 1, colors[1]); glBindVertexArray(vao[1]); glDrawTransformFeedbackStream(GL_TRIANGLES, xfb, 1); base::Display(); }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL40_nglDrawTransformFeedbackStream(JNIEnv *__env, jclass clazz, jint mode, jint id, jint stream, jlong __functionAddress) { glDrawTransformFeedbackStreamPROC glDrawTransformFeedbackStream = (glDrawTransformFeedbackStreamPROC)(intptr_t)__functionAddress; UNUSED_PARAMS(__env, clazz) glDrawTransformFeedbackStream(mode, id, stream); }