小弟用native c来绘制位图,模拟器上没有问题,但在真机上无论如何也显示不了,等待高人解答,万分感激,显示部分代码如下:void appInit()
{
glEnable(GL_NORMALIZE);
glEnable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
glShadeModel(GL_FLAT); glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glEnable(GL_LIGHT2); glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
//打开位图
memset(&g_bmpInfo, 0, sizeof(BITMAPFILE)); FILE* pFile = NULL;
pFile = fopen("/sdcard/download/test.bmp", "r");
if (NULL != pFile)
{
fread(&g_bmpInfo, 1, sizeof(g_bmpInfo), pFile);
int iPicSize = g_bmpInfo.bmiHeader.biWidth * g_bmpInfo.bmiHeader.biHeight * g_bmpInfo.bmiHeader.biBitCount / 8;
g_pBmpData = malloc(iPicSize);
fread(g_pBmpData, 1, iPicSize, pFile);
fclose(pFile);
pFile = NULL;
}
else
{
}}
// Called from the app framework.
void appDeinit()
{
}
static void PrepareFrame(int width, int height)
{
glViewport(0, 0, width, height);
//glClearColorx((GLfixed)(0.1f * 65536),
//(GLfixed)(0.2f * 65536),
//(GLfixed)(0.3f * 65536), 0x10000);
glClearColorx(0,
0,
0, 0x10000);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glMatrixMode(GL_PROJECTION);
glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity();
}static void DrawWithOpenGL(GLint textureName)
{
static GLfloat rot = 0.0; glColor4f(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
float vertices1[] = {0.0f, 0.0f,128.0f, 0.0f, 0.0f, 128.0f, 128.0f, 128.0f };
unsigned char indices[] = {0, 1, 3, 0, 3, 2}; static const Vertex3D vertices[] = {
{-1.0, 1.0, -0.0},
{ 1.0, 1.0, -0.0},
{-1.0, -1.0, -0.0},
{ 1.0, -1.0, -0.0}
};
static const Vertex3D normals[] = {
{0.0, 0.0, 1.0},
{0.0, 0.0, 1.0},
{0.0, 0.0, 1.0},
{0.0, 0.0, 1.0}
};
static const GLfloat texCoords[] = {
0.0, 1.0,
1.0, 1.0,
0.0, 0.0,
1.0, 0.0
}; glLoadIdentity();
glTranslatef(0.0, 0.0, -3.0);
glRotatef(rot, 1.0, 1.0, 1.0); glBindTexture(GL_TEXTURE_2D, textureName);
glVertexPointer(2, GL_FLOAT, 0, vertices1);
//glNormalPointer(GL_FLOAT, 0, normals);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
//glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, indices); glDisableClientState(GL_VERTEX_ARRAY);
//glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);}
static void Render(int width, int height)
{
BOOL bOK = FALSE;
BYTE* pbPacket = NULL; // Prepare OpenGL ES for rendering of the frame.
PrepareFrame(width, height);glMatrixMode(GL_PROJECTION); glLoadIdentity(); GLuint textureName;
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &textureName);
glBindTexture(GL_TEXTURE_2D, textureName); //将数据加载到纹理
int widImg = 128;//g_bmpInfo.bmiHeader.biWidth;
int heiImg = 128;//g_bmpInfo.bmiHeader.biHeight;
glTexImage2D(GL_TEXTURE_2D, 0,
GL_RGB, widImg, heiImg, 0,
GL_RGB, GL_UNSIGNED_BYTE, g_pBmpData); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);//线型滤波
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//线型滤波
//glTexParameterx(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
//glTexParameterx(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); //映射纹理
DrawWithOpenGL(textureName);}void appRender(long tick, int width, int height)
{
if (!gAppAlive)
{
return;
} Render(width, height);
}
{
glEnable(GL_NORMALIZE);
glEnable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
glShadeModel(GL_FLAT); glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glEnable(GL_LIGHT2); glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
//打开位图
memset(&g_bmpInfo, 0, sizeof(BITMAPFILE)); FILE* pFile = NULL;
pFile = fopen("/sdcard/download/test.bmp", "r");
if (NULL != pFile)
{
fread(&g_bmpInfo, 1, sizeof(g_bmpInfo), pFile);
int iPicSize = g_bmpInfo.bmiHeader.biWidth * g_bmpInfo.bmiHeader.biHeight * g_bmpInfo.bmiHeader.biBitCount / 8;
g_pBmpData = malloc(iPicSize);
fread(g_pBmpData, 1, iPicSize, pFile);
fclose(pFile);
pFile = NULL;
}
else
{
}}
// Called from the app framework.
void appDeinit()
{
}
static void PrepareFrame(int width, int height)
{
glViewport(0, 0, width, height);
//glClearColorx((GLfixed)(0.1f * 65536),
//(GLfixed)(0.2f * 65536),
//(GLfixed)(0.3f * 65536), 0x10000);
glClearColorx(0,
0,
0, 0x10000);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glMatrixMode(GL_PROJECTION);
glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity();
}static void DrawWithOpenGL(GLint textureName)
{
static GLfloat rot = 0.0; glColor4f(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
float vertices1[] = {0.0f, 0.0f,128.0f, 0.0f, 0.0f, 128.0f, 128.0f, 128.0f };
unsigned char indices[] = {0, 1, 3, 0, 3, 2}; static const Vertex3D vertices[] = {
{-1.0, 1.0, -0.0},
{ 1.0, 1.0, -0.0},
{-1.0, -1.0, -0.0},
{ 1.0, -1.0, -0.0}
};
static const Vertex3D normals[] = {
{0.0, 0.0, 1.0},
{0.0, 0.0, 1.0},
{0.0, 0.0, 1.0},
{0.0, 0.0, 1.0}
};
static const GLfloat texCoords[] = {
0.0, 1.0,
1.0, 1.0,
0.0, 0.0,
1.0, 0.0
}; glLoadIdentity();
glTranslatef(0.0, 0.0, -3.0);
glRotatef(rot, 1.0, 1.0, 1.0); glBindTexture(GL_TEXTURE_2D, textureName);
glVertexPointer(2, GL_FLOAT, 0, vertices1);
//glNormalPointer(GL_FLOAT, 0, normals);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
//glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, indices); glDisableClientState(GL_VERTEX_ARRAY);
//glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);}
static void Render(int width, int height)
{
BOOL bOK = FALSE;
BYTE* pbPacket = NULL; // Prepare OpenGL ES for rendering of the frame.
PrepareFrame(width, height);glMatrixMode(GL_PROJECTION); glLoadIdentity(); GLuint textureName;
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &textureName);
glBindTexture(GL_TEXTURE_2D, textureName); //将数据加载到纹理
int widImg = 128;//g_bmpInfo.bmiHeader.biWidth;
int heiImg = 128;//g_bmpInfo.bmiHeader.biHeight;
glTexImage2D(GL_TEXTURE_2D, 0,
GL_RGB, widImg, heiImg, 0,
GL_RGB, GL_UNSIGNED_BYTE, g_pBmpData); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);//线型滤波
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//线型滤波
//glTexParameterx(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
//glTexParameterx(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); //映射纹理
DrawWithOpenGL(textureName);}void appRender(long tick, int width, int height)
{
if (!gAppAlive)
{
return;
} Render(width, height);
}
解决方案 »
- 【100分】android秒表制作
- intent.setType(video/*)4.0以上为什么不行呢?
- android phonegap 图片上传问题
- quickmark二维码扫描开发
- 有做过版本更新的嘛?详细流程见内容,求高手知道如何实现?
- Android 全局设置项目中TextView控件值
- webview的后退缓存问题
- 求!助!Android模拟器出现问题 emulator: Failed to sync vcpu reg
- eclipse下android-sdk没有samples例程!在什么地方呢?
- Android studio @override出问题了新人求解
- 跪求WebView清除缓存的方法
- 关于android自定义字体
之前看过资料说图片尺寸要变成2的n次幂,我这个图片是176×144的,我把widImg和heiImg强行赋为128也不行
界面层的就是实现Render接口,还有那块呢,我的ImageRenderer如下class ImageRenderer implements Renderer {
private Context mContext; public VideoRenderer(Context context)
{
mContext = context;
}
@Override
public void onDrawFrame(GL10 gl)
{
nativeRender();
}
public void onSurfaceChanged(GL10 gl, int width, int height)
{
nativeResize(width, height);
}
public void onSurfaceCreated(GL10 gl, EGLConfig config)
{
nativeInit();
}
private static native void nativeInit();
private static native void nativeResize(int w, int h);
private static native void nativeRender();
private static native void nativeDone();
}
{-1.0, 1.0, -0.0},
{ 1.0, 1.0, -0.0},
{-1.0, -1.0, -0.0},
{ 1.0, -1.0, -0.0}
};
static const GLfloat texCoords[] = {
0.0, 1.0,
1.0, 1.0,
0.0, 0.0,
1.0, 0.0
};
这个映射有问题吗,还请指教
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);仅在render的时候用,还是要谢谢 xqhrs232。