CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  游戏开发

有没有高手指导我一把啊,急!!!!!!!!!!!!

楼主lizer(骄傲的猫)2005-08-04 19:59:40 在 专题开发/技术/项目 / 游戏开发 提问

我在使用directx8的时候,我使用线程来加载图片数据,首先在辅助线程中把数据读到surface上,再在主线程中把数据copy到纹理上,再进行渲染,可时不时的会出现屏幕变花,没有渲染的奇怪现象,谁来帮帮忙啊,谢谢! 问题点数:100、回复次数:14Top

1 楼why54(小坏蛋)回复于 2005-08-04 21:18:23 得分 20

把代码给出来看看,这样没法子帮你哦Top

2 楼lizer(骄傲的猫)回复于 2005-08-04 21:37:16 得分 0

读取:  
  //有m_nCount帧数据  
  for(   int   i   =   0;   i   <   pThis->m_nCount;   ++i   )  
  {  
  //图片数据在内存映像中  
  BYTE   *pData   =   pThis->m_pResLib->GetResourceData(   pThis->m_nStart   +   i   );  
  int   nLen   =   pThis->m_pResLib->GetResourceInfo(pThis->m_nStart   +   i   )->dwSize;  
  block.AttachMemory(   pData,   nLen   );  
   
  pThis->m_vvSurface[i].resize(block.m_nBlockCount);  
  pThis->m_vvX[i].resize(block.m_nBlockCount);  
  pThis->m_vvY[i].resize(block.m_nBlockCount);  
  for(   int   j   =   0;   j   <   block.m_nBlockCount;   ++j   )  
  {  
  pThis->m_vvX[i][j]   =   block.m_paBlock[j].m_x   /   128;  
  pThis->m_vvY[i][j]   =   block.m_paBlock[j].m_y   /   128;  
   
  //创建图片表面  
  pThis->m_vvSurface[i][j]   =   new   zwD3DSurface8(); while(   !pThis->m_vvSurface[i][j]->Create(   pThis->m_pGraphic,   128,   128   )   );  
   
  //写表面  
  if(   pThis->m_vvSurface[i][j]->Lock(sd)   )  
  {  
  block.DrawBlock(   &block.m_paBlock[j],   sd,   0,   0,   0,   0,   128,   128   );  
  pThis->m_vvSurface[i][j]->Unlock();  
  }  
  }  
  写纹理:  
   
  int   x   =   m_vvX[m_nFrame][i];  
  int   y   =   m_vvY[m_nFrame][i];  
  m_texture[x][y].DrawSurface(0,   0,   m_vvSurface[m_nFrame][i],   0,   0,   128,   128   );  
   
  渲染:  
  //设置位置  
  if(   FAILED(pDev->SetTransform(D3DTS_WORLD,   &m_mtxPosition)))  
  {  
  DEBUG_OUTPUT("D3D::SetTransform.");  
  }  
  //pDev->SetTransform(D3DTS_TEXTURE0,   &m_mtxTexture);  
   
  //设置像素格式  
  if(   FAILED(pDev->SetVertexShader(   zwD3DVertex::FVF   )))  
  {  
  DEBUG_OUTPUT("D3D::SetVertexShader.");  
  }  
   
  //设置顶点缓冲  
  if(   FAILED(pDev->SetStreamSource(   0,   m_pVB,   sizeof(zwD3DVertex)   )   ))  
  {  
  DEBUG_OUTPUT("D3D::SetStreamSource.");  
  }  
   
  //画矩形  
  if(   FAILED(pDev->DrawPrimitive(   D3DPT_TRIANGLESTRIP,   0,   2   )))  
  {  
  DEBUG_OUTPUT("D3D::DrawPrimitive.");  
  }  
  //代码比较乱,也请看看。Top

3 楼lizer(骄傲的猫)回复于 2005-08-04 22:03:47 得分 0

我发现好象我不做写表面那一步,这些现象就消失了,可是该画的也没有在屏幕上画出来。Top

4 楼CGChina(时空英雄)回复于 2005-08-05 03:44:26 得分 20

好像没有类似Lock   and   UnLock的功能,这样就不能保证,数据处理的完整。Top

5 楼tslkfyh(TSL)回复于 2005-08-05 09:18:53 得分 20

在画之前有没有清屏呢Top

6 楼lizer(骄傲的猫)回复于 2005-08-05 14:28:29 得分 0

基本的绘图过程都是有的,而这个问题也是随机出现的Top

7 楼tslkfyh(TSL)回复于 2005-08-05 16:53:14 得分 0

看来这是由多线程引起的,这玩意是最难掌握的,为什么一定要用多线程呢Top

8 楼why54(小坏蛋)回复于 2005-08-05 21:50:06 得分 0

1、m_vvSurface[i][j]   是new出来的,在什么地方释放的,因用了多线程,考虑在引用该变量前是否有被释放或清零的可能????  
  2、循环的边界值是否正确??  
  3、多线程间是否同步??Top

9 楼lizer(骄傲的猫)回复于 2005-08-06 10:32:07 得分 0

有时候在调用m_vvSurface[i][j]->Create的时候,会出现OUTOFMEMORY的错误,可内存明显还有啊。Top

10 楼KingofMagic(大魔头)回复于 2005-08-06 13:43:32 得分 20

哎!没什么说的,因为不知道问题是怎么出来的  
  只是没明白,为什么一定要用多线程???又不是服务端Top

11 楼lizer(骄傲的猫)回复于 2005-08-08 19:57:56 得分 0

图片数据太多了,有2G多,所以我弄一个读文件的线程,还有D3D8的程序怎么样  
  才能变成独占模式的啊Top

12 楼tslkfyh(TSL)回复于 2005-08-10 18:13:00 得分 0

可以参考一下代理模式,在真正需要某个资源才真正去加载他,但不一定得多线程Top

13 楼netbian(寻欢のLEE)回复于 2005-08-12 00:03:23 得分 20

对多线程不敢冒   呵呵    
    感觉   CGChina(时空英雄)说的有道理   没有lock   和   unlock。不过没有试验     个人意见   呵呵Top

14 楼lizer(骄傲的猫)回复于 2005-09-01 16:02:27 得分 0

问题是解决了,但还是不知道是怎么回事,我只要不是在线程中调用createsurface就没有问题。Top

相关问题

  • 发展方向,急需大家指导?
  • 怎样过滤数据窗口中没有显示的数据记录,急!在线等。100分相送,谢谢指导!
  • scjp到底有没有用啊,高手指导一下啊
  • 有没有南大的mse?给小弟点指导啊。
  • 小弟我初学Web Services 没有找到门道,请各位同行先进给我指导指导!
  • [求助]一个关于JRadioButton的问题,麻烦各位大虾指导指导,在线等(急)
  • [求助]一个关于JRadioButton的问题,麻烦各位大虾指导指导,在线等(急)
  • 急需帮助!高手来指导一下!(非代码问题)
  • MaskEdit 组件怎么用呀。多谢指导。...急需!
  • 公司考核的东东,急,请各位前辈指导!

关键词

  • 多线程
  • 数据
  • 线程
  • 渲染
  • debug
  • vvsurface
  • pthis
  • nblockcount
  • pablock
  • vvx

得分解答快速导航

  • 帖主:lizer
  • why54
  • CGChina
  • tslkfyh
  • KingofMagic
  • netbian

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo