I'm kind of a bit miffed with Opengl not prividing a buffer address. I mean, it's supposed to be hardware agnostic and have no hardware-specific stuff in the API, but you would think that once you DID set up a hardware-independent-api-driver backbuffer it might at least provide you with some kind of buffer pointer. After all you'd think that OpenGL knows what it is - unless perhaps it isn't allowed to operate at a low-enough level to find out by the o/s? But then surely there is some o/s calls that might tell you.
As to the pixmap thing.. the OpenGL documentation refers to main-memory-images as `pixmaps`, I don't think it's a DirectX terminology so much (totally guessing here). Basically because you now have two areas of memory - main memory and video memory, and because pretty much everything on the GPU has to have direct access to the memory it uses for textures and such, it has to be video ram only. It usually cannot read or write main memory. So you have to have a way of saying that data is within video ram, ie like a texture, and an alternative way to talk about memory which is outside of the access of the GPU - ie main memory and thus pixmaps (or bitmaps).
This really all stems from having GPU's which need to access dedicated video ram, and probably in some cases you could just as easily have gained direct access to videoram, but I guess its the way they wanted to design the system.
A pixmap is in main memory and can be access by the CPU in your program code, so you can manipulate pixels etc. But pixmaps cannot be displayed by the video hardware. You have to transfer the pixmap image data into a texture within video ram, ie an `Image`, before texture mapping can take place to show you the image (or use DrawPixmap).
Reminds me of the Amiga days where you only had `chipram` which could be displayed by the video hardware plus also could be accessed by the CPU. Aren't Intel integrated cards like that? But anyway.
You actually can change textures/images in videoram directly but you need to use OpenGL extensions or more recent DX calls.
As to the pixmap thing.. the OpenGL documentation refers to main-memory-images as `pixmaps`, I don't think it's a DirectX terminology so much (totally guessing here). Basically because you now have two areas of memory - main memory and video memory, and because pretty much everything on the GPU has to have direct access to the memory it uses for textures and such, it has to be video ram only. It usually cannot read or write main memory. So you have to have a way of saying that data is within video ram, ie like a texture, and an alternative way to talk about memory which is outside of the access of the GPU - ie main memory and thus pixmaps (or bitmaps).
This really all stems from having GPU's which need to access dedicated video ram, and probably in some cases you could just as easily have gained direct access to videoram, but I guess its the way they wanted to design the system.
A pixmap is in main memory and can be access by the CPU in your program code, so you can manipulate pixels etc. But pixmaps cannot be displayed by the video hardware. You have to transfer the pixmap image data into a texture within video ram, ie an `Image`, before texture mapping can take place to show you the image (or use DrawPixmap).
Reminds me of the Amiga days where you only had `chipram` which could be displayed by the video hardware plus also could be accessed by the CPU. Aren't Intel integrated cards like that? But anyway.
You actually can change textures/images in videoram directly but you need to use OpenGL extensions or more recent DX calls.