I'm trying to create an OpenGL context for rendering
to an offscreen bitmap.

The attached program gets as far as trying to call
wglCreateContext, then fails with

  WindowsError: [Errno 8] Not enough storage is available to
    process this command.

Can anyone see what's going wrong here?

Thanks,
Greg
import win32con as wc, win32ui as ui, win32gui as gui
from OpenGL import WGL as wgl

def main():
    #  Create device context and bitmap
    win = ui.CreateFrame()
    win.CreateWindow(None, "", 0, (0, 0, 1, 1), None, None, 0, 0)
    dc0 = win.GetDC()
    dc = dc0.CreateCompatibleDC(dc0)
    bm = ui.CreateBitmap()
    bm.CreateCompatibleBitmap(dc0, 10, 10)
    dc.SelectObject(bm)
    hdc = dc.GetSafeHdc()
    print "Bitmap:"
    dump_bitmap(bm)
    
    #  Create pixel format descriptor
    flags = wgl.PFD_SUPPORT_OPENGL | wgl.PFD_DRAW_TO_BITMAP #| 
wgl.PFD_SUPPORT_GDI
    pf = wgl.PIXELFORMATDESCRIPTOR()
    pf.dwFlags = flags & 0xffffffff
    pf.cColorBits = 32
    pf.iLayerType = wgl.PFD_MAIN_PLANE
    
    #  Choose pixel format
    ipf = wgl.ChoosePixelFormat(hdc, pf)
    print "Using pixel format no.", ipf
    pf2 = wgl.PIXELFORMATDESCRIPTOR()
    wgl.DescribePixelFormat(hdc, ipf, pf2.nSize, pf2)
    print "Pixel format chosen:"
    dump_pixelformat(pf2)
    
    #  Set pixel format and create opengl context
    print "Setting pixel format"
    wgl.SetPixelFormat(hdc, ipf, pf2)
    print "Creating opengl context"
    ctx = wgl.wglCreateContext(hdc)
    print "Context created"

def dump_pixelformat(pf):
    print "nSize =", pf.nSize
    print "nVersion =", pf.nVersion
    print "dwFlags = 0x%08x" % pf.dwFlags
    print "iPixelType =", pf.iPixelType
    print "cColorBits =", pf.cColorBits
    print "cRedBits =", pf.cRedBits
    print "cRedShift =", pf.cRedShift
    print "cGreenBits =", pf.cGreenBits
    print "cGreenShift =", pf.cGreenShift
    print "cBlueBits =", pf.cBlueBits
    print "cBlueShift =", pf.cBlueShift
    print "cAlphaBits =", pf.cAlphaBits
    print "cAlphaShift =", pf.cAlphaShift
    print "cAccumBits =", pf.cAccumBits
    print "cAccumRedBits =", pf.cAccumRedBits
    print "cAccumGreenBits =", pf.cAccumGreenBits
    print "cAccumBlueBits =", pf.cAccumBlueBits
    print "cDepthBits =", pf.cDepthBits
    print "cStencilBits =", pf.cStencilBits
    print "cAuxBuffers =", pf.cAuxBuffers
    print "iLayerType =", pf.iLayerType
    print "bReserved =", pf.bReserved
    print "dwLayerMask =", pf.dwLayerMask
    print "dwVisibleMask =", pf.dwVisibleMask
    print "dwDamageMask =", pf.dwDamageMask

def dump_bitmap(bm):
    info = bm.GetInfo()
    print "bmType =", info['bmType']
    print "bmWidth =", info['bmWidth']
    print "bmHeight =", info['bmHeight']
    print "bmWidthBytes =", info['bmWidthBytes']
    print "bmPlanes =", info['bmPlanes']
    print "bmBitsPixel =", info['bmBitsPixel']

main()
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to