protected: void update(int dt) { mUpdateProgram->enable(); mUpdateProgram->setUniform("u_fTime", (float)mTime); mUpdateProgram->setUniform("u_fDeltaTime", (float)dt); mRandomTexture->bind(OGL_TEXTURE_GENERIC); glEnable(GL_RASTERIZER_DISCARD); glBindBuffer(GL_ARRAY_BUFFER, mVBOs[mActiveVBO]); glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, mTBOs[mActiveTBO]); glBindVertexArray(mVAOs[0]); glBeginTransformFeedback(GL_POINTS); /////////////////////////////////////////////////////////////////////////// if(mFirst) { glDrawArrays(GL_POINTS, 0, 1); mFirst = false; } else { glDrawTransformFeedback(GL_POINTS, mTBOs[mActiveVBO]); } glEndTransformFeedback(); ////////////////////////////////////////////////////////////////////////////////////// // glExitIfError(); glBindVertexArray(0); glDisable(GL_RASTERIZER_DISCARD);
void render() { mRenderProgram->enable(); mRenderProgram->setUniform("u_vCameraPosition", mCameraPosition); mRenderProgram->setUniform("u_mVP", mProjectionMatrix * mViewMatrix); mDiffuseTexture->bind(OGL_TEXTURE_DIFFUSE); glBindBuffer(GL_ARRAY_BUFFER, mVBOs[mActiveTBO]); glBindVertexArray(mVAOs[1]); glDrawTransformFeedback(GL_POINTS, mTBOs[mActiveTBO]); // glExitIfError(); glBindVertexArray(0);