发布于2023-11-26 20:54 阅读(487) 评论(0) 点赞(4) 收藏(5)
加载Activity
布局,其中有GLSurfaceView
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mixed);
Bundle bundle = getIntent().getExtras();
if (bundle.containsKey(EXTRA_KEY_EMAIL)) {
email = bundle.getString(EXTRA_KEY_EMAIL);
TextView myTextView = (TextView) findViewById(R.id.myTextView);
myTextView.setText(myTextView.getText() + " " + email);
}
myGLRenderer.setEmail(email);
myGLSurfaceView = (GLSurfaceView) findViewById(R.id.myGLSurfaceView);
// Create an OpenGL ES 2.0 context.
myGLSurfaceView.setEGLContextClientVersion(2);
// Set the Renderer for drawing on the GLSurfaceView
myGLSurfaceView.setRenderer(myGLRenderer);
// Render the view only when there is a change in the drawing data
myGLSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}
从这里我拿了例子并修复(添加了纹理声明和初始化行)
public class MyGLRenderer implements GLSurfaceView.Renderer {
private static final String TAG = "MyGLRenderer";
private String email;
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
Log.e(TAG, "onSurfaceCreated: " + config);
GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);//gray this is done
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
Log.e(TAG, "onSurfaceChanged: width" + width + ", height:" + height);
GLES20.glViewport(0, 0, width, height);
}
@Override
public void onDrawFrame(GL10 gl) {
// Redraw background color
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
doPaintEmail1(gl);
}
private void doPaintEmail1(GL10 gl) {
// TODO do draw all stuff here: paint the email
Log.v(TAG, "doPaintEmail1: "+email);
// Create an empty, mutable bitmap
Bitmap bitmap = Bitmap.createBitmap(256, 256, Bitmap.Config.ARGB_8888);
// get a canvas to paint over the bitmap
Canvas canvas = new Canvas(bitmap);
bitmap.eraseColor(0);
// get a background image from resources
// note the image format must match the bitmap format
//Drawable background = context.getResources().getDrawable(R.drawable.background);
//background.setBounds(0, 0, 256, 256);
//background.draw(canvas); // draw the background to our bitmap
// Draw the text
Paint textPaint = new Paint();
textPaint.setTextSize(12);
textPaint.setAntiAlias(true);
textPaint.setARGB(0xff, 0xFF, 0x00, 0x00);
// draw the text centered
canvas.drawText(email, 16,112, textPaint);
int[] textures = new int[1];
//Generate one texture pointer...
gl.glGenTextures(1, textures, 0);
//...and bind it to our array
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
//Create Nearest Filtered Texture
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
//Different possible texture parameters, e.g. GL10.GL_CLAMP_TO_EDGE
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);
//Use the Android GLUtils to specify a two-dimensional texture image from our bitmap
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
//Clean up
bitmap.recycle();
}
public void setEmail(String email) {
this.email = email;
}
我希望看到我的示例电子邮件,但看不到它。
请注意,我不使用vertexShaderCode
, fragmentShaderCode
, 也不使用GLES20.glCreateProgram()
。也许缺失了,但不明白为什么,哪里需要它。
如何解决这个问题?
在 Logcat 我看到了这条doPaintEmail1: foo@example
消息。
任何 OpenGL ES 2.0 应用程序都需要创建顶点和片段着色器程序才能运行。它们不是可选的。您应该查看 Android SDK 中的 2.0 示例。如果您不想使用着色器,请改用 OpenGL ES 1.1。
这里的第三篇文章将引导您了解 SDK 中的最佳示例。
作者:黑洞官方问答小能手
链接:http://www.javaheidong.com/blog/article/684999/6958f7336b57df659b1c/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!