|
我意思是在帧缓存模式下把文字贴图render上去 SetClipping就是render文字贴图的时候分割出文字贴图在目标贴图上显示的区域 下面的是opengl的两个函数,dx应该也是可以实现的 [pre lang="c" line="1"]BOOL BeginTarget(image_p _img,uint8_t clear){ static int cacheid = 0; if(!_img) return FALSE; BIND_AND_TEST_CACHE(_img); target_w = _img->w; target_h = _img->h; //reset to target_clip target_clip = 1; ResetClip(); glBlendEquationSeparate(GL_FUNC_ADD, GL_MAX); glBindFramebuffer(GL_FRAMEBUFFER, fbo); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, cacheid, 0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0,_img->w,0,_img->h, -1, 1); glMatrixMode(GL_MODELVIEW); glPushAttrib(GL_VIEWPORT_BIT); glViewport(0,0,_img->w, _img->h); if(clear){ glClearColor( COLOR_T_R(screen_c), COLOR_T_G(screen_c), COLOR_T_B(screen_c), COLOR_T_A(screen_c) ); glClear( GL_COLOR_BUFFER_BIT); } return TRUE; } void EndTarget(){ glViewport(0,0, nge_screen.width, nge_screen.height); glPopAttrib(); glBindFramebuffer(GL_FRAMEBUFFER, 0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0,nge_screen.ori_width,nge_screen.ori_height,0, -1, 1); glMatrixMode(GL_MODELVIEW); glBlendEquation(GL_FUNC_ADD); //reset to screen clip target_clip = 0; ResetClip(); }[/pre] PS:楼上这是引用里的删除线控制符影响到正文了,算是dz的bug么 |
|
本帖最后由 ClaudeBell 于 2013-4-2 23:26 编辑 非常感谢,我试下 ------------------------------------- 对于您说的SetClipping我不是特别理解,用Gfx_SetClipping貌似是切割屏幕,而不是切割图片? 我的想法是通过切割png,将切出的png信息(坐标啥的)保存为quad,之后再用hgeSprite->Render绘制。 不知道这个思路正确否 多谢 |
|
本帖最后由 Shy07 于 2013-4-2 20:48 编辑 这些黑色锯齿实际是开启truetype后平滑的部分(alpha值小于255),而像素字体正因为没有平滑的部分才看上去正常 你可以试试直接把freetype绘制的文字贴图render到屏幕上,对比一下就知道为什么了 发现我的阅读水平越来越差了:( 如果是切割后再render出现这种情况的话,那就是切割的时候没有保存透明通道的问题了 可以试试不切割,直接SetClipping后render到目标贴图上 |