游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2435|回复: 1

opengl中如何将单缓冲改成双缓冲

[复制链接]

3

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-10-15 11:09:00 | 显示全部楼层 |阅读模式
请高手指点 谢谢

45

主题

157

帖子

169

积分

注册会员

Rank: 2

积分
169
QQ
发表于 2009-10-16 21:34:00 | 显示全部楼层

Re:opengl中如何将单缓冲改成双缓冲

bool CGraphicsEngine:ock( HWND hWnd )
{
        if( NULL == hWnd )return false;
        m_hWnd = hWnd;
        m_hDC = ::GetDC( m_hWnd );
        if( NULL == m_hDC )return false;

        PIXELFORMATDESCRIPTOR pfd = {
                                sizeof(PIXELFORMATDESCRIPTOR),// pfd结构的大小
                                1,                            // 版本号
                                PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
                                                        // 支持在窗口中绘图
                                                        // 支持 OpenGL
                                            // 双缓存模式
                                PFD_TYPE_RGBA,                // RGBA 颜色模式
                                32,                                                          // 颜色深度
                                0, 0, 0, 0, 0, 0,                          // 忽略颜色位
                                0,                            // 没有透明度缓存
                                0,                            // 忽略移位位
                                0,                            // 无累积缓存
                                0, 0, 0, 0,                                          // 忽略累积位
                                32,                                                          // z缓存深度     
                                0,                            // 无模板缓存
                                0,                            // 辅助缓存数为0全
                                PFD_MAIN_PLANE,               // 主层
                                0,                            // 保留
                                0, 0, 0 };                    // 忽略层,可见性和损毁掩模
                                
        int iPixelFormat = 0;
        do{
                iPixelFormat = ::ChoosePixelFormat( m_hDC, &pfd );//选择像素格式
                :escribePixelFormat( m_hDC, iPixelFormat, sizeof(pfd), &pfd );

        }while( ( 0 != ( pfd.dwFlags & PFD_GENERIC_FORMAT ) ) ||
                        ( 0 != ( pfd.dwFlags & PFD_GENERIC_ACCELERATED ) ) );
       
        ::SetPixelFormat( m_hDC, iPixelFormat, &pfd );        //设置像素格式
        if( pfd.dwFlags & PFD_NEED_PALETTE )
        {
                struct
                {
                        WORD Version;
                        WORD NumberOfEntries;
                        PALETTEENTRY aEntries[256];
                } logicalPalette = { 0x300, 256 };

                BYTE reds[] = {0, 36, 72, 109, 145, 182, 218, 255};
                BYTE greens[] = {0, 36, 72, 109, 145, 182, 218, 255};
                BYTE blues[] = {0, 85, 170, 255};

                for (int colorNum=0; colorNum<256; ++colorNum)
                {
                logicalPalette.aEntries[colorNum].peRed = reds[colorNum & 0x07];
                        logicalPalette.aEntries[colorNum].peGreen = greens[(colorNum >> 0x03) & 0x07];
                        logicalPalette.aEntries[colorNum].peBlue = blues[(colorNum >> 0x06) & 0x03];
                        logicalPalette.aEntries[colorNum].peFlags = 0;
                }

                m_hPalette = ::CreatePalette ((LOGPALETTE*)&logicalPalette);        //设置逻辑调色板
        }

        m_hRC = ::wglCreateContext( m_hDC );
        if( NULL == m_hRC )
        {
                return false;
        }

        if( !( ::wglMakeCurrent( m_hDC, m_hRC ) ) )
        {
                return false;
        }
        return true;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-6 23:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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