游戏开发论坛

 找回密码
 立即注册
搜索
查看: 12802|回复: 24

我只能放弃opengl了

[复制链接]

42

主题

115

帖子

141

积分

注册会员

Rank: 2

积分
141
发表于 2009-1-4 09:33:00 | 显示全部楼层 |阅读模式
没办法,在我电脑上运行的很好的程序在别人电脑上不是不能运行就是内存泄露,我又没办法用别人的电脑调试,哎,学了那么久的opengl,总还是有点依依不舍

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2009-1-4 12:44:00 | 显示全部楼层

Re:我只能放弃opengl了

坚持用下去,就能解决你的问题。你这样等于是放弃解决问题。

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2009-1-4 14:09:00 | 显示全部楼层

Re:我只能放弃opengl了

内存泄露也要算在图形api头上?

42

主题

115

帖子

141

积分

注册会员

Rank: 2

积分
141
 楼主| 发表于 2009-1-4 16:03:00 | 显示全部楼层

Re:我只能放弃opengl了


hyzboy: Re:我只能放弃opengl了
坚持用下去,就能解决你的问题。你这样等于是放弃解决问题。

首先对你的鼓励表示感激,主要是我电脑上运行这些相当正常,我又不可能去别人电脑上调试,我只好想暂时放弃opengl了,直到以后重新买台电脑试试(说实话我在opengl上花的时间太多了,我还真不想用direct3d)


hyzboy: Re:我只能放弃opengl了

内存泄露也要算在图形api头上?


cfree4有个opengl的示例代码,编译过后在别人电脑上运行一样内存泄露,,不过我试了nehe的程序却没这样。不知道为什么,我现在不换图形库我还有什么选择呢

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2009-1-4 18:55:00 | 显示全部楼层

Re: 我只能放弃opengl了

放弃吧,很快你会因为同样的泄露放弃DIRECTX的。

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2009-1-4 20:56:00 | 显示全部楼层

Re: Re:我只能放弃opengl了

lizelglg: Re:我只能放弃opengl了


cfree4有个opengl的示例代码,编译过后在别人电脑上运行一样内存泄露,,不过我试了nehe的程序却没这样。不知道为什么,我现在不换图形库我还有什么选择呢

“内存泄露也要算在图形api头上?”
你真的看懂这句话了吗?正式发布的opengl,都是经过严格测试的。内存泄露这种严重错误,与其认为是opengl的问题,我更愿意认为是你的代码或者示例代码的问题。毕竟示例代码只是示例。
还有,你如何确认是opengl的内存泄露呢?你做过检测了?你的调用方式正确?

如果你真认为是opengl的问题,那就发个bug邮件给opengl官方验证,也不枉你在这上面花的时间。

42

主题

115

帖子

141

积分

注册会员

Rank: 2

积分
141
 楼主| 发表于 2009-1-5 04:02:00 | 显示全部楼层

Re: Re: Re:我只能放弃opengl了

Enigmaya: Re: Re:我只能放弃opengl了


“内存泄露也要算在图形api头上?”
你真的看懂这句话了吗?正式发布的opengl,都是经过严格测试的。内存...

我刚才就说了nehe的代码没问题,很明显是我代码的问题,
还有,我也说了在我电脑上没任何问题,我也没理由占着别人的电脑一直搞,我和别人家隔着十万八千里,光是去就花了我很长时间,所以你让我调试这个建议很是热情奔放,创意无限的
很显然你是没看完我的话,你对我提出建议我表示感谢,我尊重你的意见,但是你不尊重我的发言

42

主题

115

帖子

141

积分

注册会员

Rank: 2

积分
141
 楼主| 发表于 2009-1-5 04:17:00 | 显示全部楼层

Re: 我只能放弃opengl了

一味地纠缠这些也没用了,这就是cfree的示例代码,代码很短也很简单,我想应该能很快找出问题所在,我希望你们帮我个忙,看看是什么原因导致的内存泄露,我事先表示感谢(当然如果你机器也能正常运行或者没时间的话那就不麻烦你了)
但如果仍然回复什么“别一味指责api”就没意思了(我从1楼就没指责过什么),不止是我,相信谁也不喜欢评论家



  1. /**************************
  2. * Includes
  3. *
  4. **************************/

  5. #include <windows.h>
  6. #include <gl/gl.h>


  7. /**************************
  8. * Function Declarations
  9. *
  10. **************************/

  11. LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
  12. WPARAM wParam, LPARAM lParam);
  13. void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC);
  14. void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC);


  15. /**************************
  16. * WinMain
  17. *
  18. **************************/

  19. int WINAPI WinMain (HINSTANCE hInstance,
  20.                     HINSTANCE hPrevInstance,
  21.                     LPSTR lpCmdLine,
  22.                     int iCmdShow)
  23. {
  24.     WNDCLASS wc;
  25.     HWND hWnd;
  26.     HDC hDC;
  27.     HGLRC hRC;        
  28.     MSG msg;
  29.     BOOL bQuit = FALSE;
  30.     float theta = 0.0f;

  31.     /* register window class */
  32.     wc.style = CS_OWNDC;
  33.     wc.lpfnWndProc = WndProc;
  34.     wc.cbClsExtra = 0;
  35.     wc.cbWndExtra = 0;
  36.     wc.hInstance = hInstance;
  37.     wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
  38.     wc.hCursor = LoadCursor (NULL, IDC_ARROW);
  39.     wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
  40.     wc.lpszMenuName = NULL;
  41.     wc.lpszClassName = "GLSample";
  42.     RegisterClass (&wc);

  43.     /* create main window */
  44.     hWnd = CreateWindow (
  45.       "GLSample", "OpenGL Sample",
  46.       WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,
  47.       0, 0, 256, 256,
  48.       NULL, NULL, hInstance, NULL);

  49.     /* enable OpenGL for the window */
  50.     EnableOpenGL (hWnd, &hDC, &hRC);

  51.     /* program main loop */
  52.     while (!bQuit)
  53.     {
  54.         /* check for messages */
  55.         if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
  56.         {
  57.             /* handle or dispatch messages */
  58.             if (msg.message == WM_QUIT)
  59.             {
  60.                 bQuit = TRUE;
  61.             }
  62.             else
  63.             {
  64.                 TranslateMessage (&msg);
  65.                 DispatchMessage (&msg);
  66.             }
  67.         }
  68.         else
  69.         {
  70.             /* OpenGL animation code goes here */

  71.             glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
  72.             glClear (GL_COLOR_BUFFER_BIT);

  73.             glPushMatrix ();
  74.             glRotatef (theta, 0.0f, 0.0f, 1.0f);
  75.             glBegin (GL_TRIANGLES);
  76.             glColor3f (1.0f, 0.0f, 0.0f);   glVertex2f (0.0f, 1.0f);
  77.             glColor3f (0.0f, 1.0f, 0.0f);   glVertex2f (0.87f, -0.5f);
  78.             glColor3f (0.0f, 0.0f, 1.0f);   glVertex2f (-0.87f, -0.5f);
  79.             glEnd ();
  80.             glPopMatrix ();

  81.             SwapBuffers (hDC);

  82.             theta += 1.0f;
  83.             Sleep (1);
  84.         }
  85.     }

  86.     /* shutdown OpenGL */
  87.     DisableOpenGL (hWnd, hDC, hRC);

  88.     /* destroy the window explicitly */
  89.     DestroyWindow (hWnd);

  90.     return msg.wParam;
  91. }


  92. /********************
  93. * Window Procedure
  94. *
  95. ********************/

  96. LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
  97.                           WPARAM wParam, LPARAM lParam)
  98. {

  99.     switch (message)
  100.     {
  101.     case WM_CREATE:
  102.         return 0;
  103.     case WM_CLOSE:
  104.         PostQuitMessage (0);
  105.         return 0;

  106.     case WM_DESTROY:
  107.         return 0;

  108.     case WM_KEYDOWN:
  109.         switch (wParam)
  110.         {
  111.         case VK_ESCAPE:
  112.             PostQuitMessage(0);
  113.             return 0;
  114.         }
  115.         return 0;

  116.     default:
  117.         return DefWindowProc (hWnd, message, wParam, lParam);
  118.     }
  119. }


  120. /*******************
  121. * Enable OpenGL
  122. *
  123. *******************/

  124. void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC)
  125. {
  126.     PIXELFORMATDESCRIPTOR pfd;
  127.     int iFormat;

  128.     /* get the device context (DC) */
  129.     *hDC = GetDC (hWnd);

  130.     /* set the pixel format for the DC */
  131.     ZeroMemory (&pfd, sizeof (pfd));
  132.     pfd.nSize = sizeof (pfd);
  133.     pfd.nVersion = 1;
  134.     pfd.dwFlags = PFD_DRAW_TO_WINDOW |
  135.       PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
  136.     pfd.iPixelType = PFD_TYPE_RGBA;
  137.     pfd.cColorBits = 24;
  138.     pfd.cDepthBits = 16;
  139.     pfd.iLayerType = PFD_MAIN_PLANE;
  140.     iFormat = ChoosePixelFormat (*hDC, &pfd);
  141.     SetPixelFormat (*hDC, iFormat, &pfd);

  142.     /* create and enable the render context (RC) */
  143.     *hRC = wglCreateContext( *hDC );
  144.     wglMakeCurrent( *hDC, *hRC );

  145. }


  146. /******************
  147. * Disable OpenGL
  148. *
  149. ******************/

  150. void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC)
  151. {
  152.     wglMakeCurrent (NULL, NULL);
  153.     wglDeleteContext (hRC);
  154.     ReleaseDC (hWnd, hDC);
  155. }
复制代码

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2009-1-5 10:15:00 | 显示全部楼层

Re:我只能放弃opengl了

winapi我不熟悉
不过我建议你用glut

5

主题

972

帖子

975

积分

高级会员

Rank: 4

积分
975
发表于 2009-1-5 14:09:00 | 显示全部楼层

Re:我只能放弃opengl了

其实d3d用起来方便多了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-18 08:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表