首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绘图GL_POINTS

绘图GL_POINTS
EN

Stack Overflow用户
提问于 2014-06-05 08:51:23
回答 1查看 2.2K关注 0票数 5

我正在绘制视图中间的一个点(我想要绘制),我想在AVD (Nexus 4,Android4.4.2- API级19,Intel (x86),RAM 768,使用主机GPU)上绘制一个点,但是我在实际设备Nexus 5,Nexus 7(2012年版本)上绘制它时有问题。在真实的设备上,只有空白(清晰的颜色)视图,中间没有点。

这是完整的代码。比较简单。注意,我还尝试了glVertexAttribPointer (glEnableVertexAttribArray)的推点数据(位置)。

你能帮我解决这个问题吗?

代码语言:javascript
复制
package com.example.point.app;

import android.app.Activity;
import android.content.Context;
import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import android.os.Bundle;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;


public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new PointView(this));
    }

    class PointView extends GLSurfaceView {

        public PointView(Context context) {
            super(context);
            setEGLContextClientVersion(2);
            setEGLConfigChooser(8, 8, 8, 8, 16, 0);
            setRenderer(new PointRenderer());
        }

        class PointRenderer implements Renderer {

            private void checkError(String message) {
                int err = GLES20.glGetError();
                if (err != GLES20.GL_NO_ERROR) {
                    throw new RuntimeException(message + " -> " + err);
                }
            }

            private int createShader(int type, String source) {
                int shader = GLES20.glCreateShader(type);
                GLES20.glShaderSource(shader, source);
                checkError("glShaderSource");
                GLES20.glCompileShader(shader);
                checkError("glCompileShader");
                return shader;
            }

            @Override
            public void onSurfaceCreated(GL10 unused, EGLConfig config) {
                int vertex = createShader(GLES20.GL_VERTEX_SHADER, "" +
                        "void main() {" +
                        "   gl_Position = vec4(0, 0, 0, 1);" +
                        "   gl_PointSize = 100;" +
                        "}");
                int fragment = createShader(GLES20.GL_FRAGMENT_SHADER, "" +
                        "precision mediump float;" +
                        "void main() {" +
                        "   gl_FragColor = vec4(1, 0, 1, 1);" +
                        "}");
                program = GLES20.glCreateProgram();
                checkError("glCreateProgram");
                GLES20.glAttachShader(program, vertex);
                checkError("glAttachShader(vertex)");
                GLES20.glAttachShader(program, fragment);
                checkError("glAttachShader(fragment)");
                GLES20.glLinkProgram(program);
                checkError("glLinkProgram");
            }

            @Override
            public void onSurfaceChanged(GL10 unused, int width, int height) {

            }

            @Override
            public void onDrawFrame(GL10 unused) {
                GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
                GLES20.glUseProgram(program);
                GLES20.glDrawArrays(GLES20.GL_POINTS, 0, 1);
            }

            private int program;

        }

    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-05 09:33:27

我读过错误并使用了浮点文字

代码语言:javascript
复制
"gl_PointSize = 100;" -> "gl_PointSize = 100.0;"

在这个改变之后,我看到了想要的结果。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24055683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档