相关疑难解决方法(0)

android上的glCreateShader和glCreateProgram失败

我在android上创建着色器程序时遇到了一个非常困难的问题.当我调用glCreateShader或glCreateProgram时,每个都返回0.

我已经涵盖了有关故障排除的所有基础:

  • 我检查确保我有一个ogl上下文(我这样做,我通过清除各种颜色的帧缓冲区测试了这个,这是有效的).

  • 我尝试了glGetError,但没有返回任何内容(GL_NO_ERROR)

我不是一个opengl或android专家,所以我不知道其他任何可能造成这种情况的事情.

我一直在nexus 7平板电脑上运行我的应用程序,我使用的是OpenGL ES 2.0,我的目标是最新版本的Android(版本17).

最后,我还要显示我的代码:

这是我设置应用程序的样板代码:

public class Platform implements ILinkable<Activity> {
    class GameLoop extends GLSurfaceView implements GLSurfaceView.Renderer {
        class Graphics2D implements IGraphics2D {
            int width  = 0;
            int height = 0;

            public void setWidth (int width ) { this.width = width; }
            public void setHeight(int height) { this.height = height; }

            public int getWidth () { return width;  }
            public int getHeight() { return height; }
        }

        class Time implements ITime {
            float frametime …
Run Code Online (Sandbox Code Playgroud)

java shader android opengl-es-2.0 nexus-7

12
推荐指数
1
解决办法
8585
查看次数

没有当前上下文的opengl es api

我已经查看了解决方案并且没有真正找到解决方案.我收到此错误,因为它似乎执行发生在gl线程之外.但是我不知道如何解决这个问题.代码如下:

public shape()
{
    super();        



    vertexShader = Shader.loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode); //<============
    fragmentShader = Shader.loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode);      

    ByteBuffer buffer = ByteBuffer.allocateDirect(getCoordinates().length * 4);
    buffer.order(ByteOrder.nativeOrder());
    vertexBuffer = buffer.asFloatBuffer();

    vertexBuffer.put(getCoordinates());
    vertexBuffer.position(0);

    ByteBuffer drawListBuffer = ByteBuffer.allocateDirect(getOrderOfDraw().length * 2);

    drawListBuffer.order(ByteOrder.nativeOrder());

    listBuffer = drawListBuffer.asShortBuffer();
    listBuffer.put(getOrderOfDraw());

    listBuffer.position(0);


     mProgram = GLES20.glCreateProgram();             // create empty OpenGL Program
     GLES20.glAttachShader(mProgram, vertexShader);   // add the vertex shader to program
     GLES20.glAttachShader(mProgram, fragmentShader); // add the fragment shader to program
     GLES20.glLinkProgram(mProgram); 

}
Run Code Online (Sandbox Code Playgroud)

并且调用渲染器是

    Square square = new Square(5, 5);

public void onDrawFrame(GL10 unused) 
{

    unused.glLoadIdentity();
    unused.glClear(GLES20.GL_COLOR_BUFFER_BIT); …
Run Code Online (Sandbox Code Playgroud)

java android opengl-es

2
推荐指数
1
解决办法
2万
查看次数

Android中的OpenGL ES 2.0上下文

我是Android上的OpenGL的新手,我读过大量记录的样本,我有点理解.但在尝试做任何复杂的事情之前,我想在黑色的bacground上绘制一个简单的2D白色矩形.没有其他的.

我坚持这个错误:call to OpenGL ES API with no current context这似乎是我从非OpenGL调用的东西Thread.问题是我不确定从OpenGL调用什么Thread.所以这是我的代码

// ==============活动================== //

public class MainActivity extends Activity {

public static String TAG = MainActivity.class.getSimpleName();

MyGLSurfaceView surface;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(
            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN
    );

    surface = new MyGLSurfaceView(this);
    setContentView(surface);
}

@Override
protected void onPause() {
    super.onPause();
    surface.onPause();
}

@Override
protected void onResume() {
    super.onResume();
    surface.onResume();
}

}
Run Code Online (Sandbox Code Playgroud)

// ==================== GLSurfaceView ======================== //

public class MyGLSurfaceView extends GLSurfaceView {

MyGLSurfaceRenderer …
Run Code Online (Sandbox Code Playgroud)

android opengl-es opengl-es-2.0

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

android ×3

java ×2

opengl-es ×2

opengl-es-2.0 ×2

nexus-7 ×1

shader ×1