0
这里输出纹理YUV422是截图屏幕与ipad的 http://joxi.ru/7J9NUdg5CbCJWOM8-i0 盛http://joxi.ru/SspPUdg5CbBrLdFutis误差在IOS
错误:
1)画面(http://joxi.ru/CYRRUdg5CbDiKIByZLo)
2)大小,而不是全屏幕
我的着色器:
NSString *const yuvFragmentShaderString = SHADER_STRING
(
varying highp vec2 texCoordVarying;
uniform sampler2D s_texture_y;
uniform sampler2D s_texture_u;
uniform sampler2D s_texture_v;
void main()
{
highp float y = texture2D(s_texture_y, texCoordVarying).r;
highp float u = texture2D(s_texture_u, texCoordVarying).r - 0.5;
highp float v = texture2D(s_texture_v, texCoordVarying).r - 0.5;
highp float r = y + 1.402 * v;
highp float g = y - 0.344 * u - 0.714 * v;
highp float b = y + 1.772 * u;
gl_FragColor = vec4(r,g,b,1.0);
}
);
我不明白在着色器或其他地方存在什么问题? 我可以添加代码
更新
创建质感
const NSUInteger widths[3] = { width, width/2, width/2 };
const NSUInteger heights[3] = { height, height, height};
for (int i = 0; i < 3; ++i) {
glBindTexture(GL_TEXTURE_2D, texture[i]);
glTexImage2D(GL_TEXTURE_2D,
0,
GL_LUMINANCE,
widths[i],
heights[i],
0,
GL_LUMINANCE,
GL_UNSIGNED_BYTE,
//pixels[i]);
bytes->data[i]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
}
质地激活Google
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glUniform1i(uniforms[UNIFORM_TEXTURE], 0);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture[1]);
glUniform1i(uniforms[UNIFORM_TEXTURE1], 1);
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, texture[2]);
glUniform1i(uniforms[UNIFORM_TEXTURE2], 2);
平局质地
GLfloat mvpMatrix[16];
[self prepareRender];
[EDMatrixTools applyIdentity:mvpMatrix];
glUniformMatrix4fv(uniforms[UNIFORM_MVP_MATRIX], 1, GL_FALSE, mvpMatrix);
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices);
glEnableVertexAttribArray(ATTRIB_VERTEX);
glVertexAttribPointer(ATTRIB_TEXTURE_COORD, 2, GL_FLOAT, 0, 0, squareTexCoords);
glEnableVertexAttribArray(ATTRIB_TEXTURE_COORD);
[self drawArraysFirst:0 Count:4];
[self presentFramebuffer];
如果你描述你正在尝试做什么以及你已经尝试了什么,这可能会有帮助。你的代码正在做各种各样的怪事。我会先简单地渲染纹理而不进行变换,然后您可以前进并添加y/u/v位。 – mobob 2013-03-23 17:25:25
我画出来自流的纹理。来到yuv,当我使用swscale转换为rgb时,一切正常。 我想优化,在着色器中进行转换 – user1881371 2013-03-24 07:38:34
看起来问题在于如何上传纹理,而不是颜色转换。它看起来像你的数据宽度不对。 – user1118321 2013-03-24 16:15:18