游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3938|回复: 5

为什么OPENGL程序初始化那么慢?

[复制链接]

42

主题

115

帖子

141

积分

注册会员

Rank: 2

积分
141
发表于 2008-1-3 00:09:00 | 显示全部楼层 |阅读模式
和DIRECTX相比,同样都是只化一个立体旋转的凌锥,用DIRECTX写的程序只要一双击就能显示出窗口和图像
而用OPENGL写的,双击以后却等了一两秒才显示出了图像和窗口,为什么?

27

主题

418

帖子

455

积分

中级会员

Rank: 3Rank: 3

积分
455
QQ
发表于 2008-1-3 21:23:00 | 显示全部楼层

Re:为什么OPENGL程序初始化那么慢?

你说的根本就是错误的比较方式。
程序是一个人写的吗?这个人对OGL和D3D的掌握程度又如何呢?……
要比较,就要进行客观公平地比较。

15

主题

202

帖子

207

积分

中级会员

Rank: 3Rank: 3

积分
207
QQ
发表于 2008-1-4 21:49:00 | 显示全部楼层

Re:为什么OPENGL程序初始化那么慢?

还在于操作系统平台是谁家的.....

42

主题

115

帖子

141

积分

注册会员

Rank: 2

积分
141
 楼主| 发表于 2008-1-6 00:50:00 | 显示全部楼层

Re:为什么OPENGL程序初始化那么慢?

testerHooK兄太激动了,我又没说OPENGL差,不然我怎么会学DIRECTX学得好好的又跑来学OPENGL,其实我最讨厌的就是DIRECTX,要想用他都要初始化半天
楼上两位,以下代码,够精简吧,够客观吧,很多东西都没初始化,但是,运行程序后鼠标一直处于繁忙状态,过一段时间才能正常

#include <windows.h>
#include <glew.h>
#include <glut.h>

HDC        hDC=0;
HGLRC        hRC=0;
LRESULT CALLBACK wndproc(HWND hwnd,UINT umsg,WPARAM wparam,LPARAM lparam)
{
        switch(umsg)
        {
        case WM_DESTROY:
                wglMakeCurrent(NULL,NULL);
                wglDeleteContext(hRC);
                ReleaseDC(hwnd,hDC);
                PostQuitMessage(0);
        default:
                return DefWindowProc(hwnd,umsg,wparam,lparam);
        }
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
        HWND hwnd;MSG msg;WNDCLASS wc;
        ZeroMemory(&wc,sizeof wc);
        wc.hCursor=LoadCursor(0,IDC_ARROW);
        wc.hInstance=hInstance;
        wc.lpfnWndProc=wndproc;
        wc.lpszClassName="classname";
        wc.style=CS_HREDRAW|CS_VREDRAW;
        RegisterClass(&wc);
        hwnd=CreateWindow("classname","WINDOWS XP",WS_VISIBLE|WS_OVERLAPPEDWINDOW,0,0,800,600,0,0,hInstance,0);
        GLuint                PixelFormat;               
        PIXELFORMATDESCRIPTOR pfd;               
        sizeof(&pfd,sizeof pfd);
        pfd.nSize=sizeof(PIXELFORMATDESCRIPTOR);
        pfd.nVersion=1;                                                               
        pfd.dwFlags=(PFD_DRAW_TO_WINDOW |PFD_SUPPORT_OPENGL |PFD_DOUBLEBUFFER);       
        pfd.iPixelType=PFD_TYPE_RGBA;               
        pfd.cColorBits=16;       
        pfd.cDepthBits=16;       
        pfd.dwLayerMask=PFD_MAIN_PLANE;       
        hDC=GetDC(hwnd);
        PixelFormat=ChoosePixelFormat(hDC,&pfd);
        SetPixelFormat(hDC,PixelFormat,&pfd);
        hRC=wglCreateContext(hDC);
        wglMakeCurrent(hDC,hRC);
        glViewport(0,0,800,600);
        glMatrixMode(GL_PROJECTION);
        gluPerspective(45,(float)4/3,1,100);
        glMatrixMode(GL_MODELVIEW);       
        glClearColor(0,0,0,1);       
        for(;;)
        {
                if (PeekMessage(&msg,0,0,0,PM_REMOVE))
                {
                        if (msg.message==WM_QUIT)break;
                        TranslateMessage(&msg);
                        DispatchMessage(&msg);
                }
                glClear(GL_COLOR_BUFFER_BIT);
                glLoadIdentity();
                SwapBuffers(hDC);
        }
        UnregisterClass("classname",hInstance);
        return msg.wParam;
}


不用API函数,仅仅创建个窗口,也那么慢,为什么?
#include <windows.h>
#include <glut.h>

void main(int a,char **b)
{
        glutInit(&a,b);
        glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
        glutInitWindowPosition(0,0);
        glutInitWindowSize(800,600);
        glutCreateWindow("1");
        glutMainLoop();
}

3

主题

17

帖子

23

积分

注册会员

Rank: 2

积分
23
发表于 2008-1-7 14:33:00 | 显示全部楼层

Re:为什么OPENGL程序初始化那么慢?

应该从OPENGL1.1是软件实现这方面来寻找答案,我猜是微软的错,但是我也搞不清楚。

27

主题

418

帖子

455

积分

中级会员

Rank: 3Rank: 3

积分
455
QQ
发表于 2008-1-11 20:40:00 | 显示全部楼层

Re:为什么OPENGL程序初始化那么慢?

你还是不要用你自己的代码来测试吧。
去运行官方的演示看看。
运行我的演示也可以。
这算是最简单的演示了,你看看速度如何。
http://bbs.gameres.com/showthread.asp?threadid=66287

这个是带纹理的。
http://bbs.gameres.com/showthread.asp?threadid=94062
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-19 20:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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