static void glnvg__setUniforms(GLNVGcontext* gl, int uniformOffset, int image) { glBindBufferRange(GL_UNIFORM_BUFFER, GFX_NVG_BINDING_FRAG_UBO, gfx::dynBuffer, uniformOffset, sizeof(GLNVGfragUniforms)); if (image != 0) { GLNVGtexture* tex = glnvg__findTexture(gl, image); glBindMultiTextureEXT(GL_TEXTURE0, GL_TEXTURE_2D, tex != NULL ? tex->tex : 0); } else { glBindMultiTextureEXT(GL_TEXTURE0, GL_TEXTURE_2D, 0); } }
void renderFB(GLuint Texture2DName) { glm::mat4 Perspective = glm::perspective(45.0f, float(Window.Size.x) / Window.Size.y, 0.1f, 100.0f); glm::mat4 ViewTranslate = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Window.TranlationCurrent.y * 2.0)); glm::mat4 ViewRotateX = glm::rotate(ViewTranslate, Window.RotationCurrent.y, glm::vec3(1.f, 0.f, 0.f)); glm::mat4 View = glm::rotate(ViewRotateX, Window.RotationCurrent.x, glm::vec3(0.f, 1.f, 0.f)); glm::mat4 Model = glm::mat4(1.0f); glm::mat4 MVP = Perspective * View * Model; glProgramUniformMatrix4fv(ProgramName[program::VERTEX], UniformMVP, 1, GL_FALSE, &MVP[0][0]); glViewportIndexedfv(0, &glm::vec4(0, 0, Window.Size.x, Window.Size.y)[0]); glBindFramebuffer(GL_FRAMEBUFFER, 0); glClearBufferfv(GL_COLOR, 0, &glm::vec4(0.0f, 0.0f, 0.0f, 1.0f)[0]); glBindMultiTextureEXT(GL_TEXTURE0, GL_TEXTURE_2D, Texture2DName); glBindSampler(0, SamplerName); glBindVertexArray(VertexArrayName); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, BufferName[buffer::ELEMENT]); glDrawElementsInstancedBaseVertex(GL_TRIANGLES, ElementCount, GL_UNSIGNED_SHORT, NULL, 1, 0); glf::checkError("renderFB"); }
void texture::unbind() const { gl_assert_error("entering texture::unbind()"); #ifdef SCM_GL_USE_DIRECT_STATE_ACCESS glBindMultiTextureEXT(GL_TEXTURE0 + _occupied_texture_unit, target(), 0); glDisableIndexedEXT(target(), _occupied_texture_unit); #else // SCM_GL_USE_DIRECT_STATE_ACCESS if (_occupied_texture_unit >= 0) { glActiveTexture(GL_TEXTURE0 + _occupied_texture_unit); _occupied_texture_unit = -1; } glBindTexture(target(), 0); glDisable(target()); #endif // SCM_GL_USE_DIRECT_STATE_ACCESS gl_assert_error("exiting texture::unbind()"); }
void resolveMultisampling() { { glm::mat4* Pointer = (glm::mat4*)glMapNamedBufferRangeEXT( BufferName[buffer::BLIT], 0, sizeof(glm::mat4), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_UNSYNCHRONIZED_BIT); glm::mat4 Perspective = glm::perspective(45.0f, float(Window.Size.x) / Window.Size.y, 0.1f, 100.0f); glm::mat4 ViewFlip = glm::scale(glm::mat4(1.0f), glm::vec3(1.0f,-1.0f, 1.0f)); glm::mat4 ViewTranslate = glm::translate(ViewFlip, glm::vec3(0.0f, 0.0f, -Window.TranlationCurrent.y * 2.0)); glm::mat4 View = glm::rotate(ViewTranslate,-15.f, glm::vec3(0.f, 0.f, 1.f)); glm::mat4 Model = glm::mat4(1.0f); glm::mat4 MVP = Perspective * View * Model; *Pointer = MVP; glUnmapNamedBufferEXT(BufferName[buffer::BLIT]); //glNamedBufferSubDataEXT(BufferName[buffer::BLIT], 0, sizeof(glm::mat4), &MVP[0][0]); } glViewportIndexedf(0, 0, 0, float(Window.Size.x), float(Window.Size.y)); glEnable(GL_SCISSOR_TEST); glBindFramebuffer(GL_FRAMEBUFFER, 0); glBindBufferBase(GL_UNIFORM_BUFFER, glf::semantic::uniform::TRANSFORM0, BufferName[buffer::BLIT]); glBindMultiTextureEXT(GL_TEXTURE0, GL_TEXTURE_2D_MULTISAMPLE, TextureName[texture::MULTISAMPLE]); glBindSampler(0, SamplerName); glBindVertexArray(VertexArrayName); // Box { glScissorIndexed(0, 1, 1, Window.Size.x / 2 - 2, Window.Size.y - 2); glBindProgramPipeline(PipelineName[program::RESOLVE_BOX]); glDrawArraysInstancedBaseInstance(GL_TRIANGLES, 0, VertexCount, 5, 0); } // Near { glScissorIndexed(0, Window.Size.x / 2 + 1, 1, Window.Size.x / 2 - 2, Window.Size.y - 2); glBindProgramPipeline(PipelineName[program::RESOLVE_NEAR]); glDrawArraysInstancedBaseInstance(GL_TRIANGLES, 0, VertexCount, 5, 0); } glDisable(GL_SCISSOR_TEST); }
void texture::bind(int texunit) const { gl_assert_error("entering texture::bind()"); assert(_texture_id); #ifdef SCM_GL_USE_DIRECT_STATE_ACCESS _occupied_texture_unit = texunit > 0 ? texunit : 0; glBindMultiTextureEXT(GL_TEXTURE0 + _occupied_texture_unit, target(), id()); glEnableIndexedEXT(target(), _occupied_texture_unit); #else // SCM_GL_USE_DIRECT_STATE_ACCESS if (texunit >= 0) { _occupied_texture_unit = texunit; glActiveTexture(GL_TEXTURE0 + _occupied_texture_unit); gl_assert_error("texture::bind() after glActiveTexture"); } glEnable(target()); gl_assert_error("texture::bind() after glEnable(glEnable)"); glBindTexture(target(), id()); #endif // SCM_GL_USE_DIRECT_STATE_ACCESS gl_assert_error("exiting texture::bind()"); }
void renderFBO() { { glm::mat4* Pointer = (glm::mat4*)glMapNamedBufferRangeEXT( BufferName[buffer::TRANSFORM], 0, sizeof(glm::mat4), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); glm::mat4 Perspective = glm::perspective(45.0f, float(FRAMEBUFFER_SIZE.x) / FRAMEBUFFER_SIZE.y, 0.1f, 100.0f); glm::mat4 ViewTranslate = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Window.TranlationCurrent.y * 2.0 - 4.0)); glm::mat4 ViewRotateX = glm::rotate(ViewTranslate, Window.RotationCurrent.y, glm::vec3(1.f, 0.f, 0.f)); glm::mat4 View = glm::rotate(ViewRotateX, Window.RotationCurrent.x, glm::vec3(0.f, 1.f, 0.f)); glm::mat4 Model = glm::mat4(1.0f); glm::mat4 MVP = Perspective * View * Model; *Pointer = MVP; glUnmapNamedBufferEXT(BufferName[buffer::TRANSFORM]); //glNamedBufferSubDataEXT(BufferName[buffer::TRANSFORM], 0, sizeof(glm::mat4), &MVP[0][0]); } glViewportIndexedf(0, 0, 0, float(FRAMEBUFFER_SIZE.x), float(FRAMEBUFFER_SIZE.y)); glEnable(GL_DEPTH_TEST); glEnable(GL_MULTISAMPLE); glBindFramebuffer(GL_FRAMEBUFFER, FramebufferName); float Depth(1.0f); glClearBufferfv(GL_DEPTH, 0, &Depth); glClearBufferfv(GL_COLOR, 0, &glm::vec4(1.0f, 0.5f, 0.0f, 1.0f)[0]); glBindProgramPipeline(PipelineName[program::THROUGH]); glBindBufferBase(GL_UNIFORM_BUFFER, glf::semantic::uniform::TRANSFORM0, BufferName[buffer::TRANSFORM]); glBindMultiTextureEXT(GL_TEXTURE0, GL_TEXTURE_2D, TextureName[texture::DIFFUSE]); glBindSampler(0, SamplerName); glBindVertexArray(VertexArrayName); glDrawArraysInstancedBaseInstance(GL_TRIANGLES, 0, VertexCount, 5, 0); glDisable(GL_MULTISAMPLE); glDisable(GL_DEPTH_TEST); }
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); }
void renderFBO(GLuint Framebuffer) { glm::mat4 Perspective = glm::perspective(45.0f, float(FRAMEBUFFER_SIZE.x) / FRAMEBUFFER_SIZE.y, 0.1f, 100.0f); glm::mat4 ViewFlip = glm::scale(glm::mat4(1.0f), glm::vec3(1.0f,-1.0f, 1.0f)); glm::mat4 ViewTranslate = glm::translate(ViewFlip, glm::vec3(0.0f, 0.0f, -Window.TranlationCurrent.y * 2.0)); glm::mat4 View = glm::rotate(ViewTranslate,-15.f, glm::vec3(0.f, 0.f, 1.f)); glm::mat4 Model = glm::mat4(1.0f); glm::mat4 MVP = Perspective * View * Model; glProgramUniformMatrix4fv(ProgramName[program::VERTEX], UniformMVP, 1, GL_FALSE, &MVP[0][0]); glProgramUniform1i(ProgramName[program::FRAGMENT], UniformDiffuse, 0); glViewportIndexedf(0, 0, 0, float(FRAMEBUFFER_SIZE.x), float(FRAMEBUFFER_SIZE.y)); glBindFramebuffer(GL_FRAMEBUFFER, Framebuffer); glClearBufferfv(GL_COLOR, 0, &glm::vec4(0.0f, 0.5f, 1.0f, 1.0f)[0]); glBindMultiTextureEXT(GL_TEXTURE0, GL_TEXTURE_2D, TextureName); glBindVertexArray(VertexArrayName); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, BufferName[buffer::ELEMENT]); glDrawElementsInstancedBaseVertex(GL_TRIANGLES, ElementCount, GL_UNSIGNED_SHORT, NULL, 1, 0); glf::checkError("renderFBO"); }
void dreamTorusDisplay( bool clear ) { static float r = 0.0f; static int count = 0; if( count == 0 ) { init(); } glPushGroupMarkerEXT(0, "display"); #if 1 if( count == 0 ) { RegalSetErrorCallback( regalerr ); } else if( count == 11 ) { RegalSetErrorCallback( NULL ); } count++; #endif glUseProgram( 0 ); if( clear ) { glClearDepth( 1.0 ); glClearColor( r / 400.f, 0, 0, 0); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); } glEnable( GL_DEPTH_TEST ); for( int i = 0; i < 8; i++ ) { glActiveTexture( GL_TEXTURE0 + i ); glDisable( GL_TEXTURE_2D ); } glBindMultiTextureEXT( texunit, GL_TEXTURE_2D, tex ); glActiveTexture( texunit ); glEnable( GL_TEXTURE_2D ); float sc = 2.0f * fabs( ( count % 800 ) / 400.0f - 1.0f ) + 1.0f; glMatrixLoadIdentityEXT( texunit ); glMatrixScalefEXT( texunit, sc, 1, 1 ); float osc = sc * 0.5f; glEnable( GL_FOG ); if( ( count % 7 ) == 0 || ( count % 17 ) == 0 ) { glDisable( GL_NORMALIZE ); glEnable( GL_RESCALE_NORMAL ); glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); glMatrixMode( GL_MODELVIEW ); glPushMatrix(); glRotatef( (float) count, -1.0f, 1.0f, 0.0f ); glScalef( osc, osc, osc ); drawAnObject(); glPopMatrix(); } else { glEnable( GL_NORMALIZE ); glDisable( GL_RESCALE_NORMAL ); glMultiTexEnviEXT( texunit, GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); glMatrixPushEXT( GL_MODELVIEW ); glMatrixRotatefEXT( GL_MODELVIEW, (float) count, -1.0f, 1.0f, 0.0f ); glMatrixScalefEXT( GL_MODELVIEW, osc, osc, osc ); drawAnObject(); glMatrixPopEXT( GL_MODELVIEW ); } r += 1.0f; if( r > 399 ) { r = 0.0f; } glPopGroupMarkerEXT(); //printf( "Draw with r=%f\n", r ); }
static void init() { glPushGroupMarkerEXT(0, "init"); glGenTextures( 1, &tex ); GLubyte pix[] = { 0x60, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0xff, 0x80, 0x80, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0x80, 0x80, 0x80, 0xff, 0x00, 0x80, 0x80, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x80, 0x00, 0xff, 0x80, 0x00, 0xff, 0xff, 0x00, 0x00, 0x80, 0xff }; glTextureImage2DEXT( tex, GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, pix ); glTextureParameteriEXT( tex, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); glTextureParameteriEXT( tex, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glBindMultiTextureEXT( texunit, GL_TEXTURE_2D, tex ); GLfloat mat_specular[] = { 0.0f, 0.0f, 1.0f, 1.0f }; GLfloat mat_shininess[] = { 50.0f }; GLfloat light_position[] = { 1.0f, 1.0f, 0.2f, 1.0f }; GLfloat light_atten[] = { 1.0f, 1.0f, 1.0f }; GLfloat light_diffuse[] = { 10.0f, 10.0f, 10.0f, 10.0f }; GLfloat light_specular[] = { 10.0f, 10.0f, 10.0f, 10.0f }; GLfloat light_spotdir[] = { -0.1f, -0.1f, -1.0f }; GLfloat light_spotcut[] = { 30.0f }; GLfloat light_spotexp[] = { 3.0f }; glClearColor (0.0, 0.0, 0.0, 0.0); //glShadeModel (GL_SMOOTH); glMatrixPushEXT( GL_MODELVIEW ); glMatrixLoadIdentityEXT( GL_MODELVIEW ); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess); //glMaterialfv(GL_BACK, GL_SHININESS, mat_shininess); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightf( GL_LIGHT0, GL_LINEAR_ATTENUATION, light_atten[1] ); glLightf( GL_LIGHT0, GL_QUADRATIC_ATTENUATION, light_atten[2] ); glLightfv( GL_LIGHT0, GL_DIFFUSE, light_diffuse ); glLightfv( GL_LIGHT0, GL_SPECULAR, light_specular ); glLightfv( GL_LIGHT0, GL_SPOT_DIRECTION, light_spotdir ); glLightfv( GL_LIGHT0, GL_SPOT_CUTOFF, light_spotcut ); glLightfv( GL_LIGHT0, GL_SPOT_EXPONENT, light_spotexp ); //GLfloat light_ambient[] = { 0.0, -1.0, 0.0, 0.0 }; //glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glMatrixPopEXT( GL_MODELVIEW ); glLightModeli( GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE ); glLightModelf( GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR ); glEnable( GL_COLOR_MATERIAL ) ; glColorMaterial( GL_BACK, GL_SPECULAR ); glLightModeli( GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE ); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glFogi( GL_FOG_MODE, GL_LINEAR ); glFogf( GL_FOG_START, 2.0f ); glFogf( GL_FOG_END, 4.0f ); GLfloat fog_color[] = { 1.0, 1.0, 0.0, 0.0 }; glFogfv( GL_FOG_COLOR, fog_color ); glEnable( GL_CLIP_PLANE3 ); GLdouble clip[] = { 1, 1, -1, 0 }; glClipPlane( GL_CLIP_PLANE3, clip ); glPopGroupMarkerEXT(); }
void AbstractTexture::bindImplementationDSA(GLint layer) { glBindMultiTextureEXT(GL_TEXTURE0 + layer, _target, (Context::current()->state()->texture->bindings[layer] = _id)); }