void PGlTexture::setWrapModeInternal(PGLTextureWrapModeEnum wrapModeS, PGLTextureWrapModeEnum wrapModeT) { if (wrapModeS == P_GLTEXTURE_WRAPMODE_REPEAT) { glTexParameteri(m_target, GL_TEXTURE_WRAP_S, GL_REPEAT); } else if (wrapModeS == P_GLTEXTURE_WRAPMODE_CLAMP_TO_EDGE) { glTexParameteri(m_target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); } else if (wrapModeS == P_GLTEXTURE_WRAPMODE_MIRRORED_REPEAT) { glTexParameteri(m_target, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT); } if (wrapModeT == P_GLTEXTURE_WRAPMODE_REPEAT) { glTexParameteri(m_target, GL_TEXTURE_WRAP_T, GL_REPEAT); } else if (wrapModeT == P_GLTEXTURE_WRAPMODE_CLAMP_TO_EDGE) { glTexParameteri(m_target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } else if (wrapModeT == P_GLTEXTURE_WRAPMODE_MIRRORED_REPEAT) { glTexParameteri(m_target, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); } pGlErrorCheckError(); }
void PGlTexture::setMipmapInternal(pbool mipmap) { if (mipmap) { m_bytes += m_bytes / 3; glGenerateMipmap(m_target); pGlErrorCheckError(); } }
void PGlTexture::copyTexture(PGlTextureFormatEnum format, puint32 x, puint32 y, puint32 width, puint32 height, puint32 border) { PASSERT(m_target == GL_TEXTURE_2D); PASSERT(m_enabled); puint32 internalFormat; puint32 dataFormat; interpretFormat(format, internalFormat, dataFormat); glCopyTexImage2D(GL_TEXTURE_2D, 0, internalFormat, x, y, width, height, border); pGlErrorCheckError(); }
puint32 PGlState::query(PGlStateQueryEnum flag) { GLint ret; switch (flag) { case P_GLTEXTURE_UNIT_NUMBER: glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &ret); break; default: PLOG_WARNINGX(P_LOG_CHANNEL_OPENGLEGL, "unsupported query flag"); break; } pGlErrorCheckError(); return ret; }
void PGlTexture::setFilteringInternal(PGlTextureFilteringEnum minFiltering, PGlTextureFilteringEnum magFiltering) { if (m_mipmap) { if (minFiltering == P_GLTEXTURE_FILTERING_NEAREST) { glTexParameteri(m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); } else { glTexParameteri(m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); } if (magFiltering == P_GLTEXTURE_FILTERING_NEAREST) { glTexParameteri(m_target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); } else { glTexParameteri(m_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } } else { if (minFiltering == P_GLTEXTURE_FILTERING_NEAREST) { glTexParameteri(m_target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); } else { glTexParameteri(m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); } if (magFiltering == P_GLTEXTURE_FILTERING_NEAREST) { glTexParameteri(m_target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); } else { glTexParameteri(m_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } } pGlErrorCheckError(); }
void PGlTexture::enable(puint32 textureUnit) { PASSERT(!m_enabled); if (m_enabled) { return ; } m_enabled = true; glActiveTexture(GL_TEXTURE0 + textureUnit); glBindTexture(m_target, m_texture); m_textureUnit = textureUnit; pGlErrorCheckError(); }
void PGlState::reset() { // Reset the OpenGL states. // -------------------------------------------------------------- // viewport // -------------------------------------------------------------- m_viewport[0] = m_initialViewport[0]; m_viewport[1] = m_initialViewport[1]; m_viewport[2] = m_initialViewport[2]; m_viewport[3] = m_initialViewport[3]; glViewport(m_viewport[0], m_viewport[1], m_viewport[2], m_viewport[3]); // -------------------------------------------------------------- // Color mask // -------------------------------------------------------------- m_colorWriteEnabled[0] = true; m_colorWriteEnabled[1] = true; m_colorWriteEnabled[2] = true; m_colorWriteEnabled[3] = true; glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); // -------------------------------------------------------------- // Clear color // -------------------------------------------------------------- m_colorClearValue[0] = 0.5f; m_colorClearValue[1] = 0.5f; m_colorClearValue[2] = 0.5f; m_colorClearValue[3] = 0.0f; glClearColor(m_colorClearValue[0], m_colorClearValue[1], m_colorClearValue[2], m_colorClearValue[3]); // -------------------------------------------------------------- // Depth // -------------------------------------------------------------- m_depthWriteEnabled = true; glDepthMask(GL_TRUE); m_depthClearValue = 1.0f; glClearDepthf(1.0f); m_depthTest = P_GLDEPTHTEST_DEFAULT; glDepthFunc(GL_LEQUAL); glEnable(GL_DEPTH_TEST); // -------------------------------------------------------------- // Scissor // -------------------------------------------------------------- m_scissorTestEnabled = false; glDisable(GL_STENCIL_TEST); m_scissor[0] = m_initialViewport[0]; m_scissor[1] = m_initialViewport[1]; m_scissor[2] = m_initialViewport[2]; m_scissor[3] = m_initialViewport[3]; glScissor(m_scissor[0], m_scissor[1], m_scissor[2], m_scissor[3]); // -------------------------------------------------------------- // TODO: stencil // -------------------------------------------------------------- // -------------------------------------------------------------- // Blend // -------------------------------------------------------------- m_blend = P_GLBLEND_DEFAULT; glDisable(GL_BLEND); // -------------------------------------------------------------- // Culling // -------------------------------------------------------------- m_cull = P_GLCULL_DEFAULT; glEnable(GL_CULL_FACE); glCullFace(GL_BACK); // -------------------------------------------------------------- // End // -------------------------------------------------------------- pGlErrorCheckError(); }