我在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) 我已经查看了解决方案并且没有真正找到解决方案.我收到此错误,因为它似乎执行发生在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) 我是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)