summaryrefslogtreecommitdiffstats
path: root/src/render/graphicshelpers/graphicshelpergl2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/graphicshelpers/graphicshelpergl2.cpp')
-rw-r--r--src/render/graphicshelpers/graphicshelpergl2.cpp162
1 files changed, 59 insertions, 103 deletions
diff --git a/src/render/graphicshelpers/graphicshelpergl2.cpp b/src/render/graphicshelpers/graphicshelpergl2.cpp
index 6ab69b491..1315b4ab8 100644
--- a/src/render/graphicshelpers/graphicshelpergl2.cpp
+++ b/src/render/graphicshelpers/graphicshelpergl2.cpp
@@ -58,7 +58,7 @@ GraphicsHelperGL2::GraphicsHelperGL2()
}
void GraphicsHelperGL2::initializeHelper(QOpenGLContext *context,
- QAbstractOpenGLFunctions *functions)
+ QAbstractOpenGLFunctions *functions)
{
Q_UNUSED(context);
m_funcs = static_cast<QOpenGLFunctions_2_0*>(functions);
@@ -95,9 +95,9 @@ void GraphicsHelperGL2::drawElementsInstancedBaseVertexBaseInstance(GLenum primi
}
void GraphicsHelperGL2::drawArraysInstanced(GLenum primitiveType,
- GLint first,
- GLsizei count,
- GLsizei instances)
+ GLint first,
+ GLsizei count,
+ GLsizei instances)
{
for (GLint i = 0; i < instances; i++)
drawArrays(primitiveType,
@@ -116,10 +116,10 @@ void GraphicsHelperGL2::drawArraysInstancedBaseInstance(GLenum primitiveType, GL
}
void GraphicsHelperGL2::drawElements(GLenum primitiveType,
- GLsizei primitiveCount,
- GLint indexType,
- void *indices,
- GLint baseVertex)
+ GLsizei primitiveCount,
+ GLint indexType,
+ void *indices,
+ GLint baseVertex)
{
if (baseVertex != 0)
qWarning() << "glDrawElementsBaseVertex is not supported with OpenGL 2";
@@ -131,8 +131,8 @@ void GraphicsHelperGL2::drawElements(GLenum primitiveType,
}
void GraphicsHelperGL2::drawArrays(GLenum primitiveType,
- GLint first,
- GLsizei count)
+ GLint first,
+ GLsizei count)
{
m_funcs->glDrawArrays(primitiveType,
first,
@@ -211,7 +211,7 @@ QVector<ShaderStorageBlock> GraphicsHelperGL2::programShaderStorageBlocks(GLuint
}
void GraphicsHelperGL2::vertexAttribDivisor(GLuint index,
- GLuint divisor)
+ GLuint divisor)
{
Q_UNUSED(index);
Q_UNUSED(divisor);
@@ -358,98 +358,6 @@ void GraphicsHelperGL2::bindFragDataLocation(GLuint, const QHash<QString, int> &
qCritical() << "bindFragDataLocation is not supported by GL 2.0";
}
-void GraphicsHelperGL2::bindUniform(const QVariant &v, const ShaderUniform &description)
-{
- switch (description.m_type) {
-
- case GL_FLOAT:
- m_funcs->glUniform1fv(description.m_location, description.m_size,
- QGraphicsUtils::valueArrayFromVariant<GLfloat>(v, description.m_size, 1));
- break;
-
- case GL_FLOAT_VEC2:
- m_funcs->glUniform2fv(description.m_location, description.m_size,
- QGraphicsUtils::valueArrayFromVariant<GLfloat>(v, description.m_size, 2));
- break;
-
- case GL_FLOAT_VEC3:
- m_funcs->glUniform3fv(description.m_location, description.m_size,
- QGraphicsUtils::valueArrayFromVariant<GLfloat>(v, description.m_size, 3));
- break;
-
- case GL_FLOAT_VEC4:
- m_funcs->glUniform4fv(description.m_location, description.m_size,
- QGraphicsUtils::valueArrayFromVariant<GLfloat>(v, description.m_size, 4));
- break;
-
- case GL_FLOAT_MAT2:
- m_funcs->glUniformMatrix2fv(description.m_location, description.m_size, GL_FALSE,
- QGraphicsUtils::valueArrayFromVariant<GLfloat>(v, description.m_size, 4));
- break;
-
- case GL_FLOAT_MAT3:
- m_funcs->glUniformMatrix3fv(description.m_location, description.m_size, GL_FALSE,
- QGraphicsUtils::valueArrayFromVariant<GLfloat>(v, description.m_size, 9));
- break;
-
- case GL_FLOAT_MAT4:
- m_funcs->glUniformMatrix4fv(description.m_location, description.m_size, GL_FALSE,
- QGraphicsUtils::valueArrayFromVariant<GLfloat>(v, description.m_size, 16));
- break;
-
- case GL_INT:
- m_funcs->glUniform1iv(description.m_location, description.m_size,
- QGraphicsUtils::valueArrayFromVariant<GLint>(v, description.m_size, 1));
- break;
-
- case GL_INT_VEC2:
- m_funcs->glUniform2iv(description.m_location, description.m_size,
- QGraphicsUtils::valueArrayFromVariant<GLint>(v, description.m_size, 2));
- break;
-
- case GL_INT_VEC3:
- m_funcs->glUniform3iv(description.m_location, description.m_size,
- QGraphicsUtils::valueArrayFromVariant<GLint>(v, description.m_size, 3));
- break;
-
- case GL_INT_VEC4:
- m_funcs->glUniform4iv(description.m_location, description.m_size,
- QGraphicsUtils::valueArrayFromVariant<GLint>(v, description.m_size, 4));
- break;
-
- case GL_BOOL:
- m_funcs->glUniform1iv(description.m_location, description.m_size,
- QGraphicsUtils::valueArrayFromVariant<GLint>(v, description.m_size, 1));
- break;
-
- case GL_BOOL_VEC2:
- m_funcs->glUniform2iv(description.m_location, description.m_size,
- QGraphicsUtils::valueArrayFromVariant<GLint>(v, description.m_size, 2));
- break;
-
- case GL_BOOL_VEC3:
- m_funcs->glUniform3iv(description.m_location, description.m_size,
- QGraphicsUtils::valueArrayFromVariant<GLint>(v, description.m_size, 3));
- break;
-
- case GL_BOOL_VEC4:
- m_funcs->glUniform4iv(description.m_location, description.m_size,
- QGraphicsUtils::valueArrayFromVariant<GLint>(v, description.m_size, 4));
- break;
-
- case GL_SAMPLER_2D:
- case GL_SAMPLER_CUBE: {
- Q_ASSERT(description.m_size == 1);
- m_funcs->glUniform1i(description.m_location, v.toInt());
- break;
- }
-
- default:
- qWarning() << Q_FUNC_INFO << "unsupported uniform type:" << description.m_type << "for " << description.m_name;
- break;
- }
-}
-
void GraphicsHelperGL2::bindFrameBufferObject(GLuint frameBufferId)
{
if (m_fboFuncs != nullptr)
@@ -775,6 +683,54 @@ void GraphicsHelperGL2::glUniformMatrix4x3fv(GLint , GLsizei , const GLfloat *)
qWarning() << "glUniformMatrix4x3fv not supported by GL 2";
}
+UniformType GraphicsHelperGL2::uniformTypeFromGLType(GLenum type)
+{
+ switch (type) {
+ case GL_FLOAT:
+ return UniformType::Float;
+ case GL_FLOAT_VEC2:
+ return UniformType::Vec2;
+ case GL_FLOAT_VEC3:
+ return UniformType::Vec3;
+ case GL_FLOAT_VEC4:
+ return UniformType::Vec4;
+ case GL_FLOAT_MAT2:
+ return UniformType::Mat2;
+ case GL_FLOAT_MAT3:
+ return UniformType::Mat3;
+ case GL_FLOAT_MAT4:
+ return UniformType::Mat4;
+ case GL_INT:
+ return UniformType::Int;
+ case GL_INT_VEC2:
+ return UniformType::IVec2;
+ case GL_INT_VEC3:
+ return UniformType::IVec3;
+ case GL_INT_VEC4:
+ return UniformType::IVec4;
+ case GL_BOOL:
+ return UniformType::Bool;
+ case GL_BOOL_VEC2:
+ return UniformType::BVec2;
+ case GL_BOOL_VEC3:
+ return UniformType::BVec3;
+ case GL_BOOL_VEC4:
+ return UniformType::BVec4;
+
+ case GL_SAMPLER_1D:
+ case GL_SAMPLER_1D_SHADOW:
+ case GL_SAMPLER_2D:
+ case GL_SAMPLER_2D_SHADOW:
+ case GL_SAMPLER_CUBE:
+ case GL_SAMPLER_3D:
+ return UniformType::Sampler;
+
+ default:
+ Q_UNREACHABLE();
+ return UniformType::Float;
+ }
+}
+
} // namespace Render
} // namespace Qt3DRender