0
나는 OpenGL을 배우려고 노력해 왔고 삼각형을 가져와야한다. 내 코드를 렌더링하면 clearColor가 렌더링되지만 삼각형과 정점은 렌더링되지 않는다. 단편 쉐이더는 사람이 문제를 좀 볼 수있는 오류를 반환하지 않고 감사삼각형을 렌더링하기 위해서 OpenGL es 2.0을 얻을 수 없다.
public class MainActivity extends Activity implements GLSurfaceView.Renderer
{
public static int POSITION_ATTRIBUTE = 0;
public int program;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
GLSurfaceView glSurfaceView = new GLSurfaceView(this);
glSurfaceView.setEGLContextClientVersion(2);
glSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 0, 0);
glSurfaceView.setRenderer(this);
setContentView(glSurfaceView);
}
@Override
public void onSurfaceCreated(GL10 unused, EGLConfig config)
{
// Vertex Shader Source Code
String vertexShaderSource = "" +
"attribute vec2 position; \n" +
"\n" +
"void main() \n" +
"{ \n" +
" gl_Position = vec4(position.x, position.y, 0.0, 1.0); \n" +
"} \n" +
"\n";
String fragmentShaderSource = "" +
"\n" +
"\n" +
"void main() \n" +
"{ \n" +
" gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0); \n" +
"} \n" +
"\n";
// Write and compile vertex shader
int vertexShader = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
GLES20.glShaderSource(vertexShader, vertexShaderSource);
GLES20.glCompileShader(vertexShader);
Log.i("Vertex Shader", "Compile Log: " + GLES20.glGetShaderInfoLog(vertexShader));
// Write and compile fragment shader
int fragmentShader = GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER);
GLES20.glShaderSource(fragmentShader, fragmentShaderSource);
GLES20.glCompileShader(fragmentShader);
Log.i("Fragment Shader", "Compile Log: " + GLES20.glGetShaderInfoLog(fragmentShader));
// Link the shaders into a program object
program = GLES20.glCreateProgram();
GLES20.glAttachShader(program, vertexShader);
GLES20.glAttachShader(program, fragmentShader);
// Links the variables
GLES20.glBindAttribLocation(program, POSITION_ATTRIBUTE, "position");
GLES20.glLinkProgram(program);
Log.i("Link", "Link Log: " + GLES20.glGetProgramInfoLog(program));
GLES20.glClearColor(0.8f, 0.3f, 0.2f, 1.0f);
GLES20.glEnableVertexAttribArray(POSITION_ATTRIBUTE);
}
@Override
public void onSurfaceChanged(GL10 unused, int width, int height)
{
}
@Override
public void onDrawFrame(GL10 unused)
{
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
// Give OpenGl a trinagle to render
float[] geometry = new float[]{
-0.2f, 0.3f,
0.4f, 0.5f,
0.1f, 0.1f,
};
ByteBuffer geometryByteBuffer = ByteBuffer.allocateDirect(geometry.length * 4);
geometryByteBuffer.order(ByteOrder.nativeOrder());
FloatBuffer geometryBuffer = geometryByteBuffer.asFloatBuffer();
geometryBuffer.put(geometry);
geometryBuffer.rewind();
GLES20.glVertexAttribPointer(POSITION_ATTRIBUTE, 2, GLES20.GL_FLOAT, false, 0, geometryBuffer);
GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, geometry.length/2);
}
}
이것이 완전한 코드라면 'onPause()'와'onResume()'에 대한 후크가 빠져있다. 'GLSurfaceView' 문서를 보라. –
나는 그 문제점을 wasnt하는 그들을 놓쳤다는 것을 나는 알고있다 –