一个困扰我一个多星期的Nebula3的BUG

版权声明:本文为博主原创,转载请注明来源 https://blog.csdn.net/xoyojank/article/details/4436326

最近看了一些PhysX的东西, 本想写个demo练练手, 结果遇到一个非常诡异的问题

当我兴冲冲的用Wizard建了一个工程, 编译, 运行, 竟然一片黑?

奇怪啊, 这个Wizard程序应该没问题才对, 要不然我怎么敢发布出来?

换成Release, 编译...结果正常!

用PIX跟踪了一下发现, 两个版本的变换矩阵不一样!

当时就茫然了...拿SDK自带的testviewer编译运行了一下, debug版竟然是这样的:

 

只能看到两只脚, 鼠标操作没有反应!

太崩溃了~

代码肯定没修改, 因为我本机是架设了SVN的, 一切修改都有记录

重新安装一个Arip2009, 结果仍然一样!

然后QQ询问同样研究Nebula的朋友, 他们的结果是对的!

我就把我编译的testviewer.debug.exe发过去, 结果在他们那边也是正常的...

然后我就理所当然的排除了代码错误的可能性

首先怀疑自己的软件环境是不是有冲突, 因为我习惯装一大堆软件.....

正好赶上Win7出RTM, 还正好在超频论坛发现了我主板的激活BIOS(当初花钱弄了个超频专用的, 结果买回来也没超-_-), 于是就升级了...

虽说身为一个软件开发人员, 用盗版是可耻的, 但为了解决眼下的问题, 我等不到Win7开始卖了

Xp->Win7, DX SDK March 2008->March 2009, VS2005->VS2008, 9800GT driver, SVN, etc,  updated, too......

然后我就满怀希望地在全新的环境下又编译了一遍......结果仍然不对

我当时就郁闷了, 难道是硬件出了问题? 不对啊, release是正常的-_-

翻出N3 SDK的上个版本, 编译之, 正常...

难道是编译选项的问题? 全部改回去, 编译, 仍然不行

又找了个跟我软件硬件环境都几乎一样的哥们测试了一下, 他那儿也正常!

又找了个哥们, 终于他那里出现一样的症状了, 不过他不搞3D, 没法一起查了-_-

跟倒数第二个哥们辩论了一番, 他说了句: 为什么不能操作呢?

一句话惊醒梦中人: 一直以来我都是把注意力放到变换矩阵为什么不正确了, 以为矩阵不正确所以才没法操作

于找到操作的处理代码, 看到了这样一段:

嗯, 我是烧的插了个360的手柄, 不会放那儿不动也会影响操作吧? 注释掉, 编译, debug结果终于正常了!

下断点观察, 发现        float frameTime = (float) this->GetFrameTime();返回的是一个无效值.....汗

转到frameTime的老窝, 发现了这样一件事:

这俩变量竟然没初始化? 疯掉了...当初也想过变量未初始化的原因, 因为这是导致debug/release不一样结果最常见的原因.

但是在别人机器上运行正常让我排除了代码错误的可能性, 一直在找运行环境的问题

问了下那个同命相连的哥们, 他也插了个360的手柄玩MGS来着, 崩溃

最后解决办法, 把上面那两个变量的注释符去掉, 编译, OK.........

一个困扰我的问题

08-24

大家帮忙看看,为什么不能设置字体的颜色那?rnrnrn#include rn#include rn#include rn#include "Resource.h" //我的资源头文件rnrnLRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM,LPARAM);rnrnchar *szWinName= "MyWin";/* name of window class */rnchar str[255] = "sample Output"; /* holds output string */rnint maxX,maxY;rnTEXTMETRIC tm;rnint X=0,Y=0;rnHDC memDC; //内存DCrnHBITMAP membit; //兼容位图rnrnrnint WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst,LPSTR lpszArgs, int nWinMode)rnrn HWND hwnd;rn MSG msg;rn WNDCLASSEX wcl; rn wcl.cbSize = sizeof(WNDCLASSEX);rn wcl.hInstance = hThisInst; rn wcl.lpszClassName = szWinName; rn wcl.lpfnWndProc = WindowFunc; rn wcl.style = 0; rn wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION);rn wcl.hIconSm = LoadIcon(NULL, IDI_WINLOGO); wcl.hCursor=LoadCursor(NULL, IDC_ARROW); rn wcl.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);rn wcl.cbClsExtra = 0; rn wcl.cbWndExtra = 0;rn wcl.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);rn rn if(!RegisterClassEx(&wcl)) return 0;rn hwnd = CreateWindow( szWinName, rn "Edit First Candidate", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, rn CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP, rn NULL, rn hThisInst, NULL rn );rn rn ShowWindow(hwnd, nWinMode);rn UpdateWindow(hwnd);rn while(GetMessage(&msg, NULL, 0, 0))rn rn TranslateMessage(&msg); rn DispatchMessage(&msg); rn rnrnrnrnLRESULT CALLBACK WindowFunc(HWND hwnd, UINT message,WPARAM wParam,LPARAM lParam)rn rn char c;rn SIZE Size;rn PAINTSTRUCT paintstruct;rn HDC hdc;rn switch(message)rn rn case WM_CREATE:rn maxX=GetSystemMetrics(SM_CXSCREEN);rn maxY=GetSystemMetrics(SM_CYSCREEN);rn hdc=GetDC(hwnd);rn memDC=CreateCompatibleDC(hdc);rn membit=CreateCompatibleBitmap(memDC,maxX,maxY);rn SelectObject(memDC,membit);rn SelectObject(memDC,(HBRUSH)GetStockObject (WHITE_BRUSH));rn rn PatBlt(memDC,0,0,maxX,maxY,PATCOPY);rn ReleaseDC(hwnd,hdc);rn break;rn case WM_CHAR: rn if(wParam!=VK_RETURN)rn rn c=(char)wParam;rn SetBkColor(memDC,RGB(0,255,255));rn rn GetTextMetrics(memDC,&tm);rn GetTextExtentPoint32(memDC,&c,1,&Size);rn SetTextColor(memDC,RGB(0,255,0));rn //此处对输出字体颜色的设置无效,why????rn TextOut(memDC,X,Y,&c,1);rn X+=Size.cx;rn InvalidateRect(hwnd, NULL, 0); rn rn elsern rn X=0;rn Y+=tm.tmHeight;rn rn break; rn case WM_PAINT:rn hdc = BeginPaint(hwnd, &paintstruct); /* get DC */rn BitBlt(hdc,0,0,maxX,maxY,memDC,0,0,SRCCOPY);rn EndPaint(hwnd, &paintstruct); /* release DC */rn break; rnrn case WM_DESTROY: /* terminate the program */rn DeleteDC(memDC);rn DeleteObject(membit);rn PostQuitMessage(0);rn break;rn default:rn return DefWindowProc(hwnd, message, wParam, lParam);rn rn return 0;rnrn

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试