64,654
社区成员
发帖
与我相关
我的任务
分享
void RenderGPU() {
SetOrthographicProjection();
glViewport(0,0,texture_size_x, texture_size_y);
CHECK_GL_ERRORS
glBeginQuery(GL_TIME_ELAPSED,t_query);
for(int i=0;i<NUM_ITER;i++) {
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fboID[writeID]);
glDrawBuffers(2, mrt);
CHECK_GL_ERRORS
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, attachID[2*readID]);
CHECK_GL_ERRORS
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, attachID[2*readID+1]);
glClear(GL_COLOR_BUFFER_BIT);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
verletShader.Use();
verletShader.AddUniform("ellipsoid_xform"); glUniformMatrix4fv(verletShader("ellipsoid_xform"), 1, GL_FALSE, glm::value_ptr(ellipsoid));
verletShader.AddUniform("inv_ellipsoid"); glUniformMatrix4fv(verletShader("inv_ellipsoid"), 1, GL_FALSE, glm::value_ptr(inverse_ellipsoid));
//verletShader.AddUniform("ellipsoid"); glUniform4f(verletShader("ellipsoid"),center.x, center.y, center.z, radius);
DrawFullScreenQuad();
verletShader.UnUse();
//swap read/write pathways
int tmp = readID;
readID = writeID;
writeID = tmp;
}
//glFlush();
//glFinish();
CHECK_GL_ERRORS
ResetPerspectiveProjection();
//read back the results into the VBO
glBindFramebuffer(GL_READ_FRAMEBUFFER, fboID[readID]);
glReadBuffer(GL_COLOR_ATTACHMENT0);
glBindBuffer(GL_PIXEL_PACK_BUFFER, vboID);
glReadPixels(0, 0, texture_size_x, texture_size_y, GL_RGBA, GL_FLOAT, 0);
//glFlush();
//glFinish();
glEndQuery(GL_TIME_ELAPSED);