請指教 OpenGL 的基本問題.

SuperChen 2001-06-11 02:35:00
請問 wglCreateContext 或者 wglMakeCurrent 中的 HDC 參數是否可以是 Memory DC? 也就是說在 Memory DC 中執行 OpenGL 中的指令應該如何做? 最好給出比較完整的 Sample Code, 非常感謝!
...全文
113 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
SuperChen 2001-06-18
  • 打赏
  • 举报
回复
另外, DRAW_TO_BITMAP 是不能在這裡用的, 但是應該在什麼情況下用這個Flag呢, 希望大家指教.
SuperChen 2001-06-18
  • 打赏
  • 举报
回复
問題的答案應該是可以的,關鍵部分是幾個函數的調用順序和所傳參數的值要正確.

下面貼出簡單的Code,沒有做什麼錯誤處理.為了方便起見,是在C++ Builder中寫的,在一個
Form上丟了一個Panel和一個Button, 在Button OnClick寫了下面的部分.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
HDC hDC, hMemDC;
HBITMAP hBmp, hOldBmp;
HGLRC hRC;
GLfloat w, h;

w = Panel1->ClientWidth;
h = Panel1->ClientHeight;

hDC = GetDC(Panel1->Handle);
hMemDC = CreateCompatibleDC(hDC);
hBmp = CreateCompatibleBitmap(hDC, (int)w, (int)h);
hOldBmp = (HBITMAP)SelectObject(hMemDC, hBmp);

PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL,
PFD_TYPE_RGBA,
24,
0,0,0,0,0,0,
0,0,
0,0,0,0,0,
32,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,
};
int PixelFormat = ChoosePixelFormat(hMemDC, &pfd);
SetPixelFormat(hMemDC, PixelFormat, &pfd);

hRC = wglCreateContext(hMemDC);
wglMakeCurrent(hMemDC, hRC);

glEnable(GL_DEPTH_TEST);
glClearColor(1.0, 0.0, 0.0, 1.0);


glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0, 0, w, h);
glOrtho (0, 50, 0, 50, 1, -1);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0.0, 0.0, 1.0);
glLineWidth(5.0);
glBegin(GL_LINES);
glVertex3f(10.0, 10.0, 0.0);
glVertex3f(40.0, 40.0, 0.0);
glEnd();

glFlush();

BitBlt(hDC, 0, 0, (int)w, (int)h, hMemDC, 0, 0, SRCCOPY);

wglMakeCurrent(NULL, NULL);
wglDeleteContext(hRC);

SelectObject(hMemDC, hOldBmp);
DeleteObject(hBmp);
DeleteDC(hMemDC);

ReleaseDC(Panel1->Handle, hDC);
}

再次感謝大家的關注和幫助.
chenlee 2001-06-13
  • 打赏
  • 举报
回复
在PixelFormat的Flag中加入PFD_DRAW_TO_BITMAP标志
Neo2D 2001-06-13
  • 打赏
  • 举报
回复
这个bitmap是在系统内存还是在显存里?
Kevin_qing 2001-06-12
  • 打赏
  • 举报
回复
帖点代码来看看····
Neo2D 2001-06-12
  • 打赏
  • 举报
回复
有兴趣,非常有兴趣,要是有例子就更好了
SuperChen 2001-06-11
  • 打赏
  • 举报
回复
不惜血本,再加10分, 也只能加這麼多了.
SuperChen 2001-06-11
  • 打赏
  • 举报
回复
就是怎麼試都不成功才問的啊, 我覺得比較關鍵的地方是 SetPixelFormat 中設定的參數可能有影響. 大家幫忙啊, 120 分呢.
SuperChen 2001-06-11
  • 打赏
  • 举报
回复
就是怎麼試都不成功才問的啊, 我覺得比較關鍵的地方是 SetPixelFormat 中設定的參數可能有影響. 大家幫忙啊, 120 分呢.
Kevin_qing 2001-06-11
  • 打赏
  • 举报
回复
自己试试就知道了。当然是可以在内存里面着色的···

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧