私はopengl 1.1を使用するゲームに取り組んでいます。OpenGL を使用して、テクスチャを 2D で画面に直接出力したいと考えています。私はまだ始めたばかりです。この場所のブログ投稿をフォローしています。
http://quirkygba.blogspot.com/2010/10/android-native-coding-in-c.html
しかし、私はそれを機能させることはできません。画面に何かを出力する大きなコードが同封されています。なんでもいいです。これで、黒だけが印刷されます。「glClearColor」行と「glClear」行のコメントを外すと、画面に色を付けることができるので、opengl コマンドを呼び出して機能させることができることがわかります。「glDrawTexiOES」が機能しないかのようです。私はndk 7bを使用しており、エミュレーターと2.2および2.3デバイスでテストしました。どんな助けでも大歓迎です。
// Android.mk file ////////////////////////
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := something
LOCAL_CFLAGS := -Werror
LOCAL_SRC_FILES := something.c
LOCAL_LDLIBS := -llog -lGLESv1_CM
include $(BUILD_SHARED_LIBRARY)
// something.c ////////////////////////////////
//some other includes here.
#include <GLES/gl.h>
#include <GLES/glext.h>
#define LOG_TAG "something-jni"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
#define RGB565(r, g, b) (((r) << (5+6)) | ((g) << 6) | (b))
#define TRUE 1
#define FALSE 0
#define TEX_WIDTH 256
#define TEX_HEIGHT 256
#define TEX_DIMENSION 256
static uint16_t *pixbuf = NULL;
static GLuint texture;
static int screen_width, screen_height;
static void check_gl_error(const char* op)
{
GLint error;
for (error = glGetError(); error; error = glGetError())
LOGE("after %s() glError (0x%x)\n", op, error);
}
void init(void)
{
int i;
int tex_width, tex_height;
tex_width = TEX_WIDTH;
tex_height = TEX_HEIGHT;
GLint crop[4] = { 0, tex_height, tex_width, - tex_height };
pixbuf = malloc(tex_width * tex_height * 2);
for (i = 0; i < TEX_DIMENSION * TEX_DIMENSION ; i ++ ) {
pixbuf[i] = 0xffff;//RGB565(0xf,0,0);
}
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameterf( GL_TEXTURE_2D,
GL_TEXTURE_MIN_FILTER, GL_LINEAR);
check_gl_error("glTexParameteri");
glTexParameterf( GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER, GL_LINEAR);
check_gl_error("glTexParameteri");
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
check_gl_error("glTexParameteriv");
glShadeModel(GL_FLAT);
check_gl_error("glShadeModel");
glTexImage2D(GL_TEXTURE_2D, 0,
GL_RGB,
tex_width, tex_height,
0,
GL_RGB,
GL_UNSIGNED_SHORT_5_6_5,
pixbuf);
check_gl_error("glTexImage2D");
glDisable(GL_BLEND);
glDisable(GL_DITHER);
glDisable(GL_DEPTH_TEST);
glDisable(GL_FOG);
glDisable(GL_LIGHTING);
glDisable(GL_ALPHA_TEST);
glDisable(GL_COLOR_LOGIC_OP);
glDisable(GL_COLOR_MATERIAL);
glDisable(GL_STENCIL_TEST);
glDepthMask(GL_FALSE);
check_gl_error("glDepthMask");
glDisable(GL_CULL_FACE);
check_gl_error("glDisable");
//glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
//glClear(GL_COLOR_BUFFER_BIT);
glDrawTexiOES(0, 0, 0, screen_width, screen_height);
check_gl_error("glDrawTexiOES");
}
// JNI methods for something.c ////////////////
JNIEXPORT void JNICALL Java_org_..._Panel_JNIinit(JNIEnv * env, jobject obj, jint w, jint h)
{
//screen_width = w;
//screen_height = h;
init();
}
私が言うように、どんな助けもいただければ幸いです。