OpenGL ビューの CAEAGLLayer で opaque プロパティが NO に設定されています。OpenGL ビュー (チェックボード) の背後に UIImageView があります。テクスチャは、最初に OpenGL ビュー (エミューの鳥の写真) に描画されます。ここで、名声バッファの真ん中に別のテクスチャを描画したいと思います。新しいテクスチャは完全に黒く、アルファは上から下に 0 から 255 まで変化します。
これは私の2番目のテクスチャです...
これは私が欲しいものです...
これは私が得るものです...
チェックボード テクスチャは、EAGLView の背後にある UIImageView 内の UIImage です。
フレーム バッファ内の RGB 値を乱したくありません。アルファ チャネルに書き込みたいだけです。私は試した...
- glDisable(GL_BLEND) と glColorMask(0, 0, 0, 1)
- glEnable(GL_BLEND) と glBlendFuncSeparate(GL_ZERO, GL_ONE, GL_ONE, GL_ZERO)
何も機能していないようです。RGB 値は常に変更され、ピクセルは明るくなります。
ソース RGBA が (r2, g2, b2, a2) で、宛先が (r1, g1, b1, a1) の場合。最終値を (r1, g1, b1, a2) またはできれば (r1, g1, b1, some_function_of(a1, a2)) にしたい。どうすればこれを達成できますか?
これが私のコードです...
2 番目のテクスチャを描画するための Objective C コード...
- (void) drawTexture {
GLfloat textureCoordinates[] = {
0.0f, 1.0f,
1.0f, 1.0f,
0.0f, 0.0f,
1.0f, 0.0f,
};
static const GLfloat imageVertices[] = {
-0.5f, -0.5f,
0.5f, -0.5f,
-0.5f, 0.5f,
0.5f, 0.5f,
};
[EAGLContext setCurrentContext:context];
glViewport(0, 0, backingWidth, backingHeight);
glUseProgram(program);
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, texture);
glEnable (GL_BLEND);
glBlendFuncSeparate(GL_ZERO, GL_ONE, GL_ONE, GL_ZERO);
glUniform1i(inputImageTexture, 2);
glVertexAttribPointer(position, 2, GL_FLOAT, 0, 0, imageVertices);
glVertexAttribPointer(inputTextureCoordinate, 2, GL_FLOAT, 0, 0, textureCoordinates);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER];
}
頂点シェーダ...
attribute vec4 position;
attribute vec4 inputTextureCoordinate;
varying vec2 textureCoordinate;
void main()
{
gl_Position = position;
textureCoordinate = inputTextureCoordinate.xy;
}
フラグメント シェーダ...
varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
void main()
{
gl_FragColor = texture2D(inputImageTexture, textureCoordinate);
}