📄 display.c
字号:
#include <math.h>#include <zevio/gpu_factory.h>#include <GLES/egl.h>#include "display.h"#define OGLFIXED_SHIFT 16#define OGLFIXED_ONE ( 1 << OGLFIXED_SHIFT )#define OGLFLOAT_TO_FIXED(_x) ( (_x) * (OGLFIXED_ONE) )#define NEARCLIP 1.0f#define FARCLIP 500.0f#define FOV 90#define PI 3.14159fGLfloat vertex[] = { -1.0f, -1.0f, 0.0f, 1.0f, -1.0f, 0.0f, -1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f,};GLfloat texCoord[] = { 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0,};const int bitmapDimensions[2]={800,600};static void reshape(int width, int height){ glMatrixMode( GL_PROJECTION ); glLoadIdentity(); glViewport(0, 0, width, height); { float aspect, top, bottom, left, right; aspect = (float)width/(float)height; top = tan( (float)FOV * PI / 360.f ) * NEARCLIP; bottom = -top; left = aspect*top; right = -left; glFrustumx( OGLFLOAT_TO_FIXED( left ), OGLFLOAT_TO_FIXED( right ), OGLFLOAT_TO_FIXED( top ), OGLFLOAT_TO_FIXED( bottom ), OGLFLOAT_TO_FIXED( NEARCLIP ), OGLFLOAT_TO_FIXED( FARCLIP ) ); } glMatrixMode(GL_MODELVIEW); glLoadIdentity();}void display_init(){ reshape(SVGA_WINDOW_WIDTH,SVGA_WINDOW_HEIGHT); // init view glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepthf(1.0f); glShadeModel(GL_FLAT); int texWidth, texHeight; for (texWidth = 16; texWidth < bitmapDimensions[0]; texWidth <<= 1); for (texHeight = 16; texHeight < bitmapDimensions[1]; texHeight <<= 1); int i; for (i = 0; i < 4; i++) { vertex[i*3] *= ((GLfloat)bitmapDimensions[0]/bitmapDimensions[1]); texCoord[i*2] *= ((GLfloat)bitmapDimensions[0])/texWidth; texCoord[i*2+1] *= ((GLfloat)bitmapDimensions[1])/texHeight; }}static void redraw(){ glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnableClientState(GL_VERTEX_ARRAY | GL_TEXTURE_COORD_ARRAY); glVertexPointer(3, GL_FLOAT, 0, vertex); glTexCoordPointer(2, GL_FLOAT, 0, texCoord); glLoadIdentity(); glTranslatef(0.0f,0.0f,-1.0f); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glFlush (); zevio2d_wait_for_vsync(); GPU_Factory_SwapFrameBuffers();}void loadBitmapTexture(void *pixels, int width, int height, unsigned short *base, unsigned long offset){ int rowOffset = CALC_OFFSET_TO_Y(offset); int colOffset = CALC_OFFSET_TO_X(offset); unsigned short *addr; int i,j; int x,y=rowOffset; for (i=0;i<height;i++,y++) { x=colOffset; for (j=0;j<width;j++,x++) { addr = base + (((y)/8)*32 + ((x)/32)) * 256 + (((y)%8)*32 + ((x)%32)); *addr = *(((unsigned short*)pixels)+i*width+j); } }}void display_pixels(void *pData, unsigned short *gpuMem, unsigned long offset){// loadBitmapTexture(pData,bitmapDimensions[0],bitmapDimensions[1],gpuMem,offset); glZevioTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bitmapDimensions[0], bitmapDimensions[1], 0, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, pData, offset); glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); redraw();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -