android ndk and opengl-es 1.0/1.1 - 2D graphics

I'm working on a game that uses opengl 1.1. I hope to use opengl to print a texture directly to the screen in 2D. I'm only just getting started. I'm following a blog post at this location:

http://quirkygba.blogspot.com/2010/10/android-native-coding-in-c.html

I cannot get it to work, though. Enclosed is a large piece of code that should print something to the screen. Anything would be good. Now it just prints black. If I uncomment the 'glClearColor' and 'glClear' lines I can get a color to the screen, so I know that I can call an opengl command and have it work. It's almost as if 'glDrawTexiOES' doesn't work. I'm using ndk 7b and I've tested on the emulator as well as a 2.2 and 2.3 device. Any help would be appreciated.

// 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();

}

As I say, any help would be appreciated.

Answers


Are you sure your texture dimensions are power of 2?


Unless you have some code you did not share with us, first thing that I noticed is that you do not create an OpenGL context or surface anywhere. You should study how EGL needs to be used in Android NDK.


Need Your Help

Find most frequent number

java

I am new in Java. this is my homework, but I cannot fix it. Anyone want to help me? Thanks.

Rake database migrate failing with “undefined method `double`”

ruby-on-rails sqlite rake rails-migrations

I've defined a scaffold with some of the sqlite columns having type double. When I run rake db:migrate, it gives the following error:

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.