mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-26 23:48:36 -05:00
Use 2D textures as 1D not supported in Open GL ES on ARM
This commit is contained in:
parent
bd7fd29de9
commit
08cc6d02f5
@ -111,9 +111,9 @@ void GLShaderColorMap::initColorMapTextureImmutable(const QString &colorMapName)
|
|||||||
{
|
{
|
||||||
if (!m_colorMapTexture)
|
if (!m_colorMapTexture)
|
||||||
{
|
{
|
||||||
m_colorMapTexture = new QOpenGLTexture(QOpenGLTexture::Target1D);
|
m_colorMapTexture = new QOpenGLTexture(QOpenGLTexture::Target2D);
|
||||||
m_colorMapTexture->setFormat(QOpenGLTexture::RGB32F);
|
m_colorMapTexture->setFormat(QOpenGLTexture::RGB32F);
|
||||||
m_colorMapTexture->setSize(256);
|
m_colorMapTexture->setSize(256, 1);
|
||||||
m_colorMapTexture->allocateStorage();
|
m_colorMapTexture->allocateStorage();
|
||||||
m_colorMapTexture->setMinificationFilter(QOpenGLTexture::Linear);
|
m_colorMapTexture->setMinificationFilter(QOpenGLTexture::Linear);
|
||||||
m_colorMapTexture->setMagnificationFilter(QOpenGLTexture::Linear);
|
m_colorMapTexture->setMagnificationFilter(QOpenGLTexture::Linear);
|
||||||
@ -137,18 +137,18 @@ void GLShaderColorMap::initColorMapTextureMutable(const QString &colorMapName)
|
|||||||
}
|
}
|
||||||
|
|
||||||
glGenTextures(1, &m_colorMapTextureId);
|
glGenTextures(1, &m_colorMapTextureId);
|
||||||
glBindTexture(GL_TEXTURE_1D, m_colorMapTextureId);
|
glBindTexture(GL_TEXTURE_2D, m_colorMapTextureId); // Use 2D texture as 1D not supported in OpenGL ES on ARM
|
||||||
GLfloat *colorMap = (GLfloat *)ColorMap::getColorMap(colorMapName);
|
GLfloat *colorMap = (GLfloat *)ColorMap::getColorMap(colorMapName);
|
||||||
if (colorMap) {
|
if (colorMap) {
|
||||||
glTexImage1D(GL_TEXTURE_1D, 0, GL_RGB, 256, 0, GL_RGB, GL_FLOAT, colorMap);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 1, 0, GL_RGB, GL_FLOAT, colorMap);
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "GLShaderColorMap::initColorMapTextureMutable: colorMap " << colorMapName << " not supported";
|
qDebug() << "GLShaderColorMap::initColorMapTextureMutable: colorMap " << colorMapName << " not supported";
|
||||||
}
|
}
|
||||||
|
|
||||||
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, QOpenGLTexture::Repeat);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, QOpenGLTexture::Repeat);
|
||||||
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, QOpenGLTexture::Repeat);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, QOpenGLTexture::Repeat);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLShaderColorMap::drawSurfaceStrip(const QMatrix4x4& transformMatrix, GLfloat *vertices, int nbVertices, float scale, float alpha)
|
void GLShaderColorMap::drawSurfaceStrip(const QMatrix4x4& transformMatrix, GLfloat *vertices, int nbVertices, float scale, float alpha)
|
||||||
@ -263,10 +263,10 @@ const QString GLShaderColorMap::m_vertexShaderSourceColorMap = QString(
|
|||||||
const QString GLShaderColorMap::m_fragmentShaderSourceColorMap2 = QString(
|
const QString GLShaderColorMap::m_fragmentShaderSourceColorMap2 = QString(
|
||||||
"uniform float alpha;\n"
|
"uniform float alpha;\n"
|
||||||
"uniform float scale;\n"
|
"uniform float scale;\n"
|
||||||
"uniform highp sampler1D colorMap;\n"
|
"uniform highp sampler2D colorMap;\n"
|
||||||
"varying float y;\n"
|
"varying float y;\n"
|
||||||
"void main() {\n"
|
"void main() {\n"
|
||||||
" gl_FragColor = vec4(texture1D(colorMap, 1.0-(y/scale)).rgb, alpha);\n"
|
" gl_FragColor = vec4(texture2D(colorMap, vec2(1.0-(y/scale), 0)).rgb, alpha);\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -274,10 +274,10 @@ const QString GLShaderColorMap::m_fragmentShaderSourceColorMap = QString(
|
|||||||
"#version 330\n"
|
"#version 330\n"
|
||||||
"uniform float alpha;\n"
|
"uniform float alpha;\n"
|
||||||
"uniform float scale;\n"
|
"uniform float scale;\n"
|
||||||
"uniform sampler1D colorMap;\n"
|
"uniform sampler2D colorMap;\n"
|
||||||
"in float y;\n"
|
"in float y;\n"
|
||||||
"out vec4 fragColor;\n"
|
"out vec4 fragColor;\n"
|
||||||
"void main() {\n"
|
"void main() {\n"
|
||||||
" fragColor = vec4(texture(colorMap, 1.0-(y/scale)).rgb, alpha);\n"
|
" fragColor = vec4(texture(colorMap, vec2(1.0-(y/scale), 0)).rgb, alpha);\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
);
|
);
|
||||||
|
@ -240,9 +240,9 @@ void GLShaderSpectrogram::initColorMapTextureImmutable(const QString &colorMapNa
|
|||||||
{
|
{
|
||||||
if (!m_colorMapTexture)
|
if (!m_colorMapTexture)
|
||||||
{
|
{
|
||||||
m_colorMapTexture = new QOpenGLTexture(QOpenGLTexture::Target1D);
|
m_colorMapTexture = new QOpenGLTexture(QOpenGLTexture::Target2D);
|
||||||
m_colorMapTexture->setFormat(QOpenGLTexture::RGB32F);
|
m_colorMapTexture->setFormat(QOpenGLTexture::RGB32F);
|
||||||
m_colorMapTexture->setSize(256);
|
m_colorMapTexture->setSize(256, 1);
|
||||||
m_colorMapTexture->allocateStorage();
|
m_colorMapTexture->allocateStorage();
|
||||||
m_colorMapTexture->setMinificationFilter(QOpenGLTexture::Linear);
|
m_colorMapTexture->setMinificationFilter(QOpenGLTexture::Linear);
|
||||||
m_colorMapTexture->setMagnificationFilter(QOpenGLTexture::Linear);
|
m_colorMapTexture->setMagnificationFilter(QOpenGLTexture::Linear);
|
||||||
@ -266,18 +266,18 @@ void GLShaderSpectrogram::initColorMapTextureMutable(const QString &colorMapName
|
|||||||
}
|
}
|
||||||
|
|
||||||
glGenTextures(1, &m_colorMapTextureId);
|
glGenTextures(1, &m_colorMapTextureId);
|
||||||
glBindTexture(GL_TEXTURE_1D, m_colorMapTextureId);
|
glBindTexture(GL_TEXTURE_2D, m_colorMapTextureId); // Use 2D texture as 1D not supported in OpenGL ES on ARM
|
||||||
GLfloat *colorMap = (GLfloat *)ColorMap::getColorMap(colorMapName);
|
GLfloat *colorMap = (GLfloat *)ColorMap::getColorMap(colorMapName);
|
||||||
if (colorMap) {
|
if (colorMap) {
|
||||||
glTexImage1D(GL_TEXTURE_1D, 0, GL_RGB, 256, 0, GL_RGB, GL_FLOAT, colorMap);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 1, 0, GL_RGB, GL_FLOAT, colorMap);
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "GLShaderSpectrogram::initColorMapTextureMutable: colorMap " << colorMapName << " not supported";
|
qDebug() << "GLShaderSpectrogram::initColorMapTextureMutable: colorMap " << colorMapName << " not supported";
|
||||||
}
|
}
|
||||||
|
|
||||||
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, QOpenGLTexture::Repeat);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, QOpenGLTexture::Repeat);
|
||||||
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, QOpenGLTexture::Repeat);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, QOpenGLTexture::Repeat);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLShaderSpectrogram::initTexture(const QImage& image)
|
void GLShaderSpectrogram::initTexture(const QImage& image)
|
||||||
@ -412,7 +412,7 @@ void GLShaderSpectrogram::drawSurface(SpectrumSettings::SpectrogramStyle style,
|
|||||||
{
|
{
|
||||||
glBindTexture(GL_TEXTURE_2D, m_textureId);
|
glBindTexture(GL_TEXTURE_2D, m_textureId);
|
||||||
glActiveTexture(GL_TEXTURE1);
|
glActiveTexture(GL_TEXTURE1);
|
||||||
glBindTexture(GL_TEXTURE_1D, m_colorMapTextureId);
|
glBindTexture(GL_TEXTURE_2D, m_colorMapTextureId);
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -786,7 +786,7 @@ const QString GLShaderSpectrogram::m_fragmentShaderShaded = QString(
|
|||||||
"in vec3 normal;\n"
|
"in vec3 normal;\n"
|
||||||
"in float lightDistance2;\n"
|
"in float lightDistance2;\n"
|
||||||
"out vec4 fragColor;\n"
|
"out vec4 fragColor;\n"
|
||||||
"uniform sampler1D colorMap;\n"
|
"uniform sampler2D colorMap;\n"
|
||||||
"uniform vec3 lightDir;\n"
|
"uniform vec3 lightDir;\n"
|
||||||
"void main(void) {\n"
|
"void main(void) {\n"
|
||||||
" float factor;\n"
|
" float factor;\n"
|
||||||
@ -796,9 +796,9 @@ const QString GLShaderSpectrogram::m_fragmentShaderShaded = QString(
|
|||||||
" factor = 0.5;\n"
|
" factor = 0.5;\n"
|
||||||
" float ambient = 0.4;\n"
|
" float ambient = 0.4;\n"
|
||||||
" vec3 color;\n"
|
" vec3 color;\n"
|
||||||
" color.r = texture(colorMap, coord2.z).r;\n"
|
" color.r = texture(colorMap, vec2(coord2.z, 0)).r;\n"
|
||||||
" color.g = texture(colorMap, coord2.z).g;\n"
|
" color.g = texture(colorMap, vec2(coord2.z, 0)).g;\n"
|
||||||
" color.b = texture(colorMap, coord2.z).b;\n"
|
" color.b = texture(colorMap, vec2(coord2.z, 0)).b;\n"
|
||||||
" float cosTheta = max(0.0, dot(normal, lightDir));\n"
|
" float cosTheta = max(0.0, dot(normal, lightDir));\n"
|
||||||
" float d2 = max(1.0, lightDistance2*lightDistance2);\n"
|
" float d2 = max(1.0, lightDistance2*lightDistance2);\n"
|
||||||
" vec3 relection = (ambient * color + color * cosTheta / d2) * factor;\n"
|
" vec3 relection = (ambient * color + color * cosTheta / d2) * factor;\n"
|
||||||
@ -812,16 +812,16 @@ const QString GLShaderSpectrogram::m_fragmentShaderShaded = QString(
|
|||||||
const QString GLShaderSpectrogram::m_fragmentShaderSimple2 = QString(
|
const QString GLShaderSpectrogram::m_fragmentShaderSimple2 = QString(
|
||||||
"varying vec4 coord;\n"
|
"varying vec4 coord;\n"
|
||||||
"uniform float brightness;\n"
|
"uniform float brightness;\n"
|
||||||
"uniform sampler1D colorMap;\n"
|
"uniform sampler2D colorMap;\n"
|
||||||
"void main(void) {\n"
|
"void main(void) {\n"
|
||||||
" float factor;\n"
|
" float factor;\n"
|
||||||
" if (gl_FrontFacing)\n"
|
" if (gl_FrontFacing)\n"
|
||||||
" factor = 1.0;\n"
|
" factor = 1.0;\n"
|
||||||
" else\n"
|
" else\n"
|
||||||
" factor = 0.5;\n"
|
" factor = 0.5;\n"
|
||||||
" gl_FragColor[0] = texture1D(colorMap, coord.z).r * brightness * factor;\n"
|
" gl_FragColor[0] = texture2D(colorMap, vec2(coord.z, 0)).r * brightness * factor;\n"
|
||||||
" gl_FragColor[1] = texture1D(colorMap, coord.z).g * brightness * factor;\n"
|
" gl_FragColor[1] = texture2D(colorMap, vec2(coord.z, 0)).g * brightness * factor;\n"
|
||||||
" gl_FragColor[2] = texture1D(colorMap, coord.z).b * brightness * factor;\n"
|
" gl_FragColor[2] = texture2D(colorMap, vec2(coord.z, 0)).b * brightness * factor;\n"
|
||||||
" gl_FragColor[3] = 1.0;\n"
|
" gl_FragColor[3] = 1.0;\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
);
|
);
|
||||||
@ -831,16 +831,16 @@ const QString GLShaderSpectrogram::m_fragmentShaderSimple = QString(
|
|||||||
"in vec4 coord;\n"
|
"in vec4 coord;\n"
|
||||||
"out vec4 fragColor;\n"
|
"out vec4 fragColor;\n"
|
||||||
"uniform float brightness;\n"
|
"uniform float brightness;\n"
|
||||||
"uniform sampler1D colorMap;\n"
|
"uniform sampler2D colorMap;\n"
|
||||||
"void main(void) {\n"
|
"void main(void) {\n"
|
||||||
" float factor;\n"
|
" float factor;\n"
|
||||||
" if (gl_FrontFacing)\n"
|
" if (gl_FrontFacing)\n"
|
||||||
" factor = 1.0;\n"
|
" factor = 1.0;\n"
|
||||||
" else\n"
|
" else\n"
|
||||||
" factor = 0.5;\n"
|
" factor = 0.5;\n"
|
||||||
" fragColor[0] = texture(colorMap, coord.z).r * brightness * factor;\n"
|
" fragColor[0] = texture(colorMap, vec2(coord.z, 0)).r * brightness * factor;\n"
|
||||||
" fragColor[1] = texture(colorMap, coord.z).g * brightness * factor;\n"
|
" fragColor[1] = texture(colorMap, vec2(coord.z, 0)).g * brightness * factor;\n"
|
||||||
" fragColor[2] = texture(colorMap, coord.z).b * brightness * factor;\n"
|
" fragColor[2] = texture(colorMap, vec2(coord.z, 0)).b * brightness * factor;\n"
|
||||||
" fragColor[3] = 1.0;\n"
|
" fragColor[3] = 1.0;\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user