bool render() { glBindFramebuffer(GL_FRAMEBUFFER, 0); glClearBufferfv(GL_COLOR, 0, &glm::vec4(1.0f, 0.5f, 0.0f, 1.0f)[0]); glBindProgramPipeline(PipelineName); // Pass 1, render the scene in a multisampled framebuffer glEnable(GL_MULTISAMPLE); glEnable(GL_SAMPLE_SHADING); glMinSampleShading(4.0f); //glEnable(GL_SAMPLE_MASK); //glSampleMaski(0, 0xFF); renderFBO(); glDisable(GL_MULTISAMPLE); // Resolved multisampling glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferRenderName); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, FramebufferResolveName); glBlitFramebuffer( 0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, 0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, GL_COLOR_BUFFER_BIT, GL_NEAREST); glBindFramebuffer(GL_FRAMEBUFFER, 0); // Pass 2, render the colorbuffer from the multisampled framebuffer glm::vec2 WindowSize(this->getWindowSize()); glViewportIndexedfv(0, &glm::vec4(0, 0, WindowSize)[0]); renderFB(); return true; }
virtual void render(double currentTime) { static const GLfloat black[] = { 0.0f, 0.0f, 0.0f, 1.0f }; static const GLfloat one = 1.0f; glViewport(0, 0, info.windowWidth, info.windowHeight); glClearBufferfv(GL_COLOR, 0, black); glUseProgram(program); vmath::mat4 proj_matrix = vmath::perspective(50.0f, (float)info.windowWidth / (float)info.windowHeight, 0.1f, 1000.0f); glUniformMatrix4fv(proj_location, 1, GL_FALSE, proj_matrix); // glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); if (sample_shading) { glEnable(GL_SAMPLE_SHADING); glMinSampleShading(1.0f); } else { glDisable(GL_SAMPLE_SHADING); } #ifdef MANY_CUBES for (i = 0; i < 24; i++) { float f = (float)i + (float)currentTime * 0.3f; vmath::mat4 mv_matrix = vmath::translate(0.0f, 0.0f, -20.0f) * vmath::rotate((float)currentTime * 45.0f, 0.0f, 1.0f, 0.0f) * vmath::rotate((float)currentTime * 21.0f, 1.0f, 0.0f, 0.0f) * vmath::translate(sinf(2.1f * f) * 2.0f, cosf(1.7f * f) * 2.0f, sinf(1.3f * f) * cosf(1.5f * f) * 2.0f); glUniformMatrix4fv(mv_location, 1, GL_FALSE, mv_matrix); glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, 0); } #else float f = (float)currentTime * 0.3f; currentTime = 3.15; vmath::mat4 mv_matrix = vmath::translate(0.0f, 0.0f, -4.0f) * /*vmath::translate(sinf(2.1f * f) * 0.5f, cosf(1.7f * f) * 0.5f, sinf(1.3f * f) * cosf(1.5f * f) * 2.0f) **/ vmath::rotate((float)currentTime * 45.0f, 0.0f, 1.0f, 0.0f) * vmath::rotate((float)currentTime * 81.0f, 1.0f, 0.0f, 0.0f); glUniformMatrix4fv(mv_location, 1, GL_FALSE, mv_matrix); glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, 0); #endif }
bool begin() { bool Validated = this->checkExtension("GL_ARB_pipeline_statistics_query"); if (Validated) Validated = initBuffer(); if (Validated) Validated = initTexture(); if (Validated) Validated = initProgram(); if (Validated) Validated = initVertexArray(); glEnable(GL_SAMPLE_SHADING); glMinSampleShading(4.0f); return Validated; }
bool begin() { bool Validated = true; if(Validated) Validated = initBuffer(); if(Validated) Validated = initTexture(); if(Validated) Validated = initProgram(); if(Validated) Validated = initVertexArray(); glEnable(GL_SAMPLE_SHADING); glMinSampleShading(4.0f); return Validated; }
void Cube::Render(GLfloat aspect) { glUseProgram(program); glBindVertexArray(VAO); if (sample_shading) { glEnable(GL_SAMPLE_SHADING); glMinSampleShading(1.0f); } else glDisable(GL_SAMPLE_SHADING); static float currentTime; currentTime = glfwGetTime() / 100.0f; #ifdef MANY_CUBES for (int i = 0; i < 24; i++) { float time = (float)i + (float)currentTime * 0.3f; glm::mat4 mv_matrix = glm::translate(glm::mat4(1.0), glm::vec3(0.0f, 0.0f, -6.0f)); glm::translate(glm::mat4(1.0), glm::vec3(sinf(2.1f * time)*0.5f, cosf(1.7f*time)*0.5f, sinf(1.3f * time) *cosf(1.5f * time) * 2.0f)); mv_matrix *= glm::rotate(glm::mat4(1.0), (float)currentTime * 45.0f, glm::vec3(0.0f, 1.0f, 0.0f)); mv_matrix *= glm::rotate(glm::mat4(1.0), (float)currentTime * 21.0f, glm::vec3(1.0f, 0.0f, 0.0f)); mv_matrix *= glm::translate(glm::mat4(1.0), glm::vec3(sinf(2.1f * time) * 2.0f, cosf(1.7f * time) * 2.0f, sinf(1.3f * time) * cosf(1.5f * time) * 2.0f)); cubeShader.setUniformMatrix4fv("mv_matrix", 1, 0, glm::value_ptr(mv_matrix)); glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, 0); } #else glm::mat4 proj_matrix = glm::perspective(50.0f, 1300.0f / 900.0f, 0.1f, 1000.0f); float time = (float)currentTime * 0.3f; glm::mat4 mv_matrix = glm::translate(glm::mat4(1.0), glm::vec3(0.0f, 0.0f, -4.0f)); mv_matrix *= glm::rotate(glm::mat4(1.0), (float)currentTime * 45.0f, glm::vec3(0.0f, 1.0f, 0.0f)); mv_matrix *= glm::rotate(glm::mat4(1.0), (float)currentTime * 81.0f, glm::vec3(1.0f, 0.0f, 0.0f)); glUniformMatrix4fv(mvp_matrix_loc, 1, 0, glm::value_ptr(proj_matrix * mv_matrix)); glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, 0); #endif glBindVertexArray(0); glUseProgram(0); }
void Image::renderRandom (RendererRandom *renderer, VertexBuffer *buf, GLenum mode) { glEnable( GL_MULTISAMPLE ); glEnable( GL_SAMPLE_SHADING ); glMinSampleShading( 1.0f ); //glEnable( GL_BLEND ); //glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); Shader *shader = renderer->shader; shader->use(); Int32 uModelview = shader->program->getUniform( "modelview" ); glUniformMatrix4fv( uModelview, 1, false, (GLfloat*) matModelView.top().m ); Int32 uProjection = shader->program->getUniform( "projection" ); glUniformMatrix4fv( uProjection, 1, false, (GLfloat*) matProjection.top().m ); Int32 uMatTexture = shader->program->getUniform( "matTexture" ); glUniformMatrix4fv( uMatTexture, 1, false, (GLfloat*) matTexture.top().m ); Int32 uPtrGrid = shader->program->getUniform( "ptrGrid" ); glUniformui64( uPtrGrid, bufGpuGrid.getAddress() ); Int32 uPtrStream = shader->program->getUniform( "ptrStream" ); glUniformui64( uPtrStream, bufGpuStream.getAddress() ); Int32 uPtrObjects = shader->program->getUniform( "ptrObjects" ); glUniformui64( uPtrObjects, bufObjInfos.getAddress() ); Int32 uCellSize = shader->program->getUniform( "cellSize" ); glUniform2f( uCellSize, cellSize.x, cellSize.y ); Int32 uGridSize = shader->program->getUniform( "gridSize" ); glUniform2i( uGridSize, gridSize.x, gridSize.y ); Int32 uGridOrigin = shader->program->getUniform( "gridOrigin" ); glUniform2f( uGridOrigin, min.x, min.y ); buf->render( shader, mode ); //glDisable( GL_BLEND ); }
void renderFBO() { glEnable(GL_MULTISAMPLE); glEnable(GL_SAMPLE_SHADING); glMinSampleShading(4.0f); glClipControl(GL_LOWER_LEFT, GL_NEGATIVE_ONE_TO_ONE); glViewportIndexedf(0, 0, 0, static_cast<float>(FRAMEBUFFER_SIZE.x), static_cast<float>(FRAMEBUFFER_SIZE.y)); glClearNamedFramebufferfv(FramebufferName[framebuffer::RENDER], GL_COLOR, 0, &glm::vec4(0.0f, 0.5f, 1.0f, 1.0f)[0]); glBindFramebuffer(GL_FRAMEBUFFER, FramebufferName[framebuffer::RENDER]); glBindBufferRange(GL_UNIFORM_BUFFER, semantic::uniform::TRANSFORM0, BufferName[buffer::TRANSFORM], 0, this->UniformBlockSize); glBindSamplers(0, 1, &SamplerName); glBindTextureUnit(0, TextureName[texture::TEXTURE]); glBindVertexArray(VertexArrayName); glDrawElementsInstancedBaseVertexBaseInstance(GL_TRIANGLES, ElementCount, GL_UNSIGNED_SHORT, nullptr, 1, 0, 0); glDisable(GL_MULTISAMPLE); }
void renderFBO() { //glEnable(GL_SAMPLE_MASK); //glSampleMaski(0, 0xFF); glEnable(GL_MULTISAMPLE); glEnable(GL_SAMPLE_SHADING); glMinSampleShading(4.0f); glViewportIndexedf(0, 0, 0, static_cast<float>(FRAMEBUFFER_SIZE.x), static_cast<float>(FRAMEBUFFER_SIZE.y)); glBindFramebuffer(GL_FRAMEBUFFER, FramebufferName[framebuffer::RENDER]); glClearBufferfv(GL_COLOR, 0, &glm::vec4(1.0f)[0]); glBindBufferRange(GL_UNIFORM_BUFFER, semantic::uniform::TRANSFORM0, BufferName[buffer::TRANSFORM], 0, this->UniformBlockSize); glBindSampler(0, SamplerName); glBindMultiTextureEXT(GL_TEXTURE0, GL_TEXTURE_2D, TextureName[texture::TEXTURE]); glBindVertexArray(VertexArrayName); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, BufferName[buffer::ELEMENT]); glDrawElementsInstancedBaseVertexBaseInstance(GL_TRIANGLES, ElementCount, GL_UNSIGNED_SHORT, nullptr, 1, 0, 0); glDisable(GL_MULTISAMPLE); }
JNIEXPORT void JNICALL Java_org_lwjgl_opengles_GLES32_glMinSampleShading(JNIEnv *__env, jclass clazz, jfloat value) { glMinSampleShadingPROC glMinSampleShading = (glMinSampleShadingPROC)tlsGetFunction(345); UNUSED_PARAM(clazz) glMinSampleShading(value); }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL40_nglMinSampleShading(JNIEnv *__env, jclass clazz, jfloat value, jlong __functionAddress) { glMinSampleShadingPROC glMinSampleShading = (glMinSampleShadingPROC)(intptr_t)__functionAddress; UNUSED_PARAMS(__env, clazz) glMinSampleShading(value); }
void Image::renderClassic (RendererClassic *renderer) { glEnable( GL_MULTISAMPLE ); glEnable( GL_SAMPLE_SHADING ); glMinSampleShading( 1.0f ); glDisable( GL_DEPTH_TEST ); glEnable( GL_STENCIL_TEST ); for (Uint32 o=0; o<objects.size(); ++o) { Object *obj = objects[o]; /////////////////////////////////////////////// //Render into stencil glStencilFunc( GL_ALWAYS, 0, 1 ); glStencilOp( GL_INVERT, GL_INVERT, GL_INVERT ); glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE ); /////////////////////////////////////////////// //Render quads { Shader *shader = renderer->shaderQuads; shader->use(); Int32 uModelview = shader->program->getUniform( "modelview" ); glUniformMatrix4fv( uModelview, 1, false, (GLfloat*) matModelView.top().m ); Int32 uProjection = shader->program->getUniform( "projection" ); glUniformMatrix4fv( uProjection, 1, false, (GLfloat*) matProjection.top().m ); Int32 aPos = shader->program->getAttribute( "in_pos" ); glEnableVertexAttribArray( aPos ); glBindBuffer( GL_ARRAY_BUFFER, obj->bufQuads.getId() ); glVertexAttribPointer( aPos, 2, GL_FLOAT, false, sizeof( Vec2 ), 0 ); glDrawArrays( GL_TRIANGLES, 0, obj->quads.size() * 3 ); glDisableVertexAttribArray( aPos ); } /////////////////////////////////////////////// //Render contours { Shader *shader = renderer->shaderContour; shader->use(); Int32 uModelview = shader->program->getUniform( "modelview" ); glUniformMatrix4fv( uModelview, 1, false, (GLfloat*) matModelView.top().m ); Int32 uProjection = shader->program->getUniform( "projection" ); glUniformMatrix4fv( uProjection, 1, false, (GLfloat*) matProjection.top().m ); for (Uint32 c=0; c<obj->contours.size(); ++c) { Contour &cnt = obj->contours[c]; Int32 aPos = shader->program->getAttribute( "in_pos" ); glEnableVertexAttribArray( aPos ); glBindBuffer( GL_ARRAY_BUFFER, obj->bufContourPoints.getId() ); glVertexAttribPointer( aPos, 2, GL_FLOAT, false, sizeof( Vec2 ), 0 ); glDrawArrays( GL_TRIANGLE_FAN, cnt.start, cnt.length ); glDisableVertexAttribArray( aPos ); } } /////////////////////////////////////////////// //Render through stencil glStencilFunc( GL_EQUAL, 1, 1 ); glStencilOp( GL_ZERO, GL_ZERO, GL_ZERO ); glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); /////////////////////////////////////////////// //Render boundbox quad { Shader *shader = renderer->shader; shader->use(); Int32 uModelview = shader->program->getUniform( "modelview" ); glUniformMatrix4fv( uModelview, 1, false, (GLfloat*) matModelView.top().m ); Int32 uProjection = shader->program->getUniform( "projection" ); glUniformMatrix4fv( uProjection, 1, false, (GLfloat*) matProjection.top().m ); Int32 uColor = shader->program->getUniform( "color" ); glUniform4fv( uColor, 1, (GLfloat*) &obj->color ); Float coords[] = { obj->min.x, obj->min.y, obj->max.x, obj->min.y, obj->max.x, obj->max.y, obj->min.x, obj->max.y }; Int32 aPos = shader->program->getAttribute( "in_pos" ); glBindBuffer( GL_ARRAY_BUFFER, 0 ); glVertexAttribPointer( aPos, 2, GL_FLOAT, false, 2 * sizeof( Float ), coords ); glEnableVertexAttribArray( aPos ); glDrawArrays( GL_QUADS, 0, 4 ); glDisableVertexAttribArray( aPos ); } } glDisable( GL_STENCIL_TEST ); }