月度存档: 一月 2013

opengles2.0中快速定位贴图是否正确读入

学习opengles2.0中的着色器,结果在贴图那里遇到困难了。

贴图是全黑,无法确认是贴图加载错误还是着色器错误。

可以用以下代码生成测试贴图。

GLuint CreateSimpleTexture2D( )
{
// Texture object handle
GLuint textureId;

// 2×2 Image, 3 bytes per pixel (R, G, B)
GLubyte pixels[4 * 3] =
{
255,   0,   0, // Red
0, 255,   0, // Green
0,   0, 255, // Blue
255, 255,   0  // Yellow
};

// Use tightly packed data
glPixelStorei ( GL_UNPACK_ALIGNMENT, 1 );

// Generate a texture object
glGenTextures ( 1, &textureId );

// Bind the texture object
glBindTexture ( GL_TEXTURE_2D, textureId );

// Load the texture
glTexImage2D ( GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, pixels );

// Set the filtering mode
glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );

return textureId;

}

opengles学习

今天看明白了android sdk中的hellogl2的源码。

gles2.0中使用着色器,一个最简单的gles2.0中至少必须要两个着点器,一个顶点着色器,一个片断着色器。

以下是画线:

glVertexAttribPointer(_postion, 3, GL_FLOAT, false, 0, gTriangleVertices);
glEnableVertexAttribArray(_postion);
glVertexAttribPointer(_color,3,GL_FLOAT,false,0,colors);
glEnableVertexAttribArray(_color);
glDrawArrays(GL_LINES, 0, 2);

 

 

opengles android 真机开发一

今天真机到手,前几个月看过的android开发,已经完全记不清了.

这里从头一步步记录下所做的操作供以后参考用:

1、使用eclispe中的import功能,让ndk中的samples/hello-gl2导入工程。导入时先把copy into workspace,避免把samples中的代码污染掉。

2、修改AndroidManifest.xml把以下内容放在<application>标签前面。

<uses-feature android:glEsVersion=”0x00020000″/>
<uses-sdk
android:minSdkVersion=”8″
android:targetSdkVersion=”15″ />

3、转为c/c++工程,builder改为使用ndk-build.cmd

4、下面尝试真机调试:

如果android手机未被adb辨认,需要两个地方确认下,一是手机的usb调试是否打开,二是手机驱动是否安装正确,windows下需要安装google use driver,如果驱动安装失败,使用以下方法解决。

如果使用android google usb driver 安装不上可以修改extras\google\usb_driver 目录下的 android_winusb.inf 文件
具体方式是:用文本工具打开这个文件,在文件里在有一些  %SingleAdbInterface%  %CompositeAdbInterface%  成对的定义,把你的设备信息也按照这个样子写在里面,格式参照google
%SingleAdbInterface%        = USB_Install, USB\###########(就是硬件id里面的短的值)
%CompositeAdbInterface%     = USB_Install, USB\##########(就是硬件id里面的长的值 )
(硬件id的查看方法和上面一样,不过需要注意这里是全部需要,和google一样)

如果以上都成功的话,在cmd中执行:adb devices 可以看到真机。

神那,第一个程序终于在真机上跑起来了。

下面做第二步,把cocos2d-x的samples移到真机上测试一下opengles.

5、如果发现build时,console没有输出,是因为没有添加builder的原因。

6、解决以下错误:注意添加的是environment

Cannot find module with tag ‘cocos2dx’

Add environment “NDK_MODULE_PATH” of values “<Your-cocos2d-x-Root>;<Your-cocos2d-x-Root>\cocos2dx\platform\third_party\android\prebuilt;”

7、如果继续报以下错:注意修改的是enviroment

Android NDK: WARNING: Ignoring unknown import directory: C:\cocos2d-2.0-x-2.0.3
Android NDK: jni/Android.mk: Cannot find module with tag ‘cocos2dx’ in import path
jni/Android.mk:19: *** Android NDK: Aborting.    .  Stop.
Android NDK: Are you sure your NDK_MODULE_PATH variable is properly defined ?
Android NDK: The following directories were searched:
Android NDK:

那么修改为:把c:\cocos-2dx安装目录,修改为: c:/cocos-2dx

费了我3个小时啊。

8、fatal error: GLES2/gl2platform.h: No such file or directory

在Application.mk中添加:

APP_PLATFORM := android-8

然后编译工程,不知道原因,但是确实解决问题了。

9、android下 assets资源可以使用link的方式连接到resources资源目录。

10、如果提示没有box2d的库。

LOCAL_WHOLE_STATIC_LIBRARIES 上添加 box2d_static

最后一行添加:$(call import-module,external/Box2D)