2012-05-02 5 views
0

나는 OpenGL 1.1을 사용하는 게임을하고있다. OpenGL을 사용하여 2D에서 직접 화면에 텍스처를 인쇄하고 싶습니다. 나는 단지 시작하고있다. 나는이 위치에서 블로그 게시물을 다음 해요 : 그래도,이 동작하지 않습니다android ndk and opengl-es 1.0/1.1 - 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(); 

} 

내가 말했듯이, 어떤 도움을 주시면 감사하겠습니다.

답변

0

텍스처 크기가 2의 거듭 제곱입니까?

+0

256x256은 정상입니다. 맞습니까? –

+1

이 텍스처 이미지의 크기라면 - 그렇다. – EvilDuck

0

당신이 우리와 공유하지 않은 코드가 없다면, 내가 알아 차린 첫 번째 사실은 OpenGL 컨텍스트 또는 표면을 어디에도 만들지 않는다는 것입니다. Android NDK에서 EGL을 사용해야하는 방법을 연구해야합니다.