mirror of
https://github.com/wang-bin/QtAV.git
synced 2026-10-28 02:56:45 +08:00
gl: make it possible to support targets other than GL_TEXTURE_2D
still can not set target
This commit is contained in:
@@ -85,6 +85,7 @@ public:
|
||||
, video_format(VideoFormat::Format_Invalid)
|
||||
, plane1_linesize(0)
|
||||
, effective_tex_width_ratio(1.0)
|
||||
, target(GL_TEXTURE_2D)
|
||||
{
|
||||
colorTransform.setOutputColorSpace(ColorTransform::RGB);
|
||||
}
|
||||
@@ -133,6 +134,7 @@ public:
|
||||
|
||||
QVector<int> effective_tex_width; //without additional width for alignment
|
||||
qreal effective_tex_width_ratio;
|
||||
GLenum target;
|
||||
QVector<GLint> internal_format;
|
||||
QVector<GLenum> data_format;
|
||||
QVector<GLenum> data_type;
|
||||
|
||||
+26
-26
@@ -421,9 +421,9 @@ bool VideoMaterial::bind()
|
||||
OpenGLHelper::glActiveTexture(GL_TEXTURE0 + p);
|
||||
// for dynamicgl. qglfunctions before qt5.3 does not have portable gl functions
|
||||
#ifndef QT_OPENGL_DYNAMIC
|
||||
glBindTexture(GL_TEXTURE_2D, d.textures[p]);
|
||||
glBindTexture(d.target, d.textures[p]);
|
||||
#else
|
||||
QOpenGLContext::currentContext()->functions()->glBindTexture(GL_TEXTURE_2D, d.textures[p]);
|
||||
QOpenGLContext::currentContext()->functions()->glBindTexture(d.target, d.textures[p]);
|
||||
#endif
|
||||
}
|
||||
return true;
|
||||
@@ -437,9 +437,9 @@ void VideoMaterial::bindPlane(int p)
|
||||
OpenGLHelper::glActiveTexture(GL_TEXTURE0 + p); //0 must active?
|
||||
// for dynamicgl. qglfunctions before qt5.3 does not have portable gl functions
|
||||
#ifndef QT_OPENGL_DYNAMIC
|
||||
glBindTexture(GL_TEXTURE_2D, d.textures[p]);
|
||||
glBindTexture(d.target, d.textures[p]);
|
||||
#else
|
||||
QOpenGLContext::currentContext()->functions()->glBindTexture(GL_TEXTURE_2D, d.textures[p]);
|
||||
QOpenGLContext::currentContext()->functions()->glBindTexture(d.target, d.textures[p]);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
@@ -450,20 +450,20 @@ void VideoMaterial::bindPlane(int p)
|
||||
//qDebug("bpl[%d]=%d width=%d", p, frame.bytesPerLine(p), frame.planeWidth(p));
|
||||
// for dynamicgl. qglfunctions before qt5.3 does not have portable gl functions
|
||||
#ifndef QT_OPENGL_DYNAMIC
|
||||
glBindTexture(GL_TEXTURE_2D, d.textures[p]);
|
||||
glBindTexture(d.target, d.textures[p]);
|
||||
//d.setupQuality();
|
||||
// This is necessary for non-power-of-two textures
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, d.texture_upload_size[p].width(), d.texture_upload_size[p].height(), d.data_format[p], d.data_type[p], d.frame.bits(p));
|
||||
glTexParameteri(d.target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(d.target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
glTexSubImage2D(d.target, 0, 0, 0, d.texture_upload_size[p].width(), d.texture_upload_size[p].height(), d.data_format[p], d.data_type[p], d.frame.bits(p));
|
||||
#else
|
||||
QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
|
||||
f->glBindTexture(GL_TEXTURE_2D, d.textures[p]);
|
||||
f->glBindTexture(d.target, d.textures[p]);
|
||||
//d.setupQuality();
|
||||
// This is necessary for non-power-of-two textures
|
||||
f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
f->glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, d.texture_upload_size[p].width(), d.texture_upload_size[p].height(), d.data_format[p], d.data_type[p], d.frame.bits(p));
|
||||
f->glTexParameteri(d.target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
f->glTexParameteri(d.target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
f->glTexSubImage2D(d.target, 0, 0, 0, d.texture_upload_size[p].width(), d.texture_upload_size[p].height(), d.data_format[p], d.data_type[p], d.frame.bits(p));
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -562,22 +562,22 @@ bool VideoMaterialPrivate::initTexture(GLuint tex, GLint internal_format, GLenum
|
||||
{
|
||||
// for dynamicgl. qglfunctions before qt5.3 does not have portable gl functions
|
||||
#ifndef QT_OPENGL_DYNAMIC
|
||||
glBindTexture(GL_TEXTURE_2D, tex);
|
||||
glBindTexture(target, tex);
|
||||
setupQuality();
|
||||
// This is necessary for non-power-of-two textures
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, internal_format, width, height, 0/*border, ES not support*/, format, dataType, NULL);
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
glTexImage2D(target, 0, internal_format, width, height, 0/*border, ES not support*/, format, dataType, NULL);
|
||||
glBindTexture(target, 0);
|
||||
#else
|
||||
QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
|
||||
f->glBindTexture(GL_TEXTURE_2D, tex);
|
||||
f->glBindTexture(target, tex);
|
||||
setupQuality();
|
||||
// This is necessary for non-power-of-two textures
|
||||
f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
f->glTexImage2D(GL_TEXTURE_2D, 0, internal_format, width, height, 0/*border, ES not support*/, format, dataType, NULL);
|
||||
f->glBindTexture(GL_TEXTURE_2D, 0);
|
||||
f->glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
f->glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
f->glTexImage2D(target, 0, internal_format, width, height, 0/*border, ES not support*/, format, dataType, NULL);
|
||||
f->glBindTexture(target, 0);
|
||||
#endif
|
||||
|
||||
return true;
|
||||
@@ -736,12 +736,12 @@ bool VideoMaterialPrivate::updateTexturesIfNeeded()
|
||||
void VideoMaterialPrivate::setupQuality()
|
||||
{
|
||||
#ifndef QT_OPENGL_DYNAMIC
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
#else
|
||||
QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
|
||||
f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
f->glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
f->glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -118,7 +118,6 @@ void OpenGLRendererBase::onInitializeGL()
|
||||
bool hasGLSL = QOpenGLShaderProgram::hasOpenGLShaderPrograms();
|
||||
qDebug("OpenGL version: %d.%d hasGLSL: %d", ctx->format().majorVersion(), ctx->format().minorVersion(), hasGLSL);
|
||||
initializeOpenGLFunctions();
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glClearColor(0.0, 0.0, 0.0, 0.0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user