Simulating OpenGL's Display List via Direct3D

Started by
10 comments, last by 21st Century Moose 12 years ago
I'm trying to come up with a way to closely simulate OpenGL Display List functionality for Direct3D. IMO, Microsoft should have kept the IDirect3DExecuteBuffer interface available along side of the IDirect3DDeviceX::Draw[Indexed]Primitive[UP] methods of rendering to reduce this problem. So, something like a push buffer sounds desirable. Btw, anyone have any links as to how state blocks work? Thanks.
Advertisement
Directx is a Object Oriented Api, not like Client-Server Opengl State Machine. What you want to do can be done using Index and Vertex Buffers, then pass the pointer to the device with SetStreamSource.
Quote:Original post by blueshogun96
IMO, Microsoft should have kept the IDirect3DExecuteBuffer interface available along side of the IDirect3DDeviceX::Draw[Indexed]Primitive[UP] methods of rendering to reduce this problem.

What problem are you trying to solve, exactly?

clb: At the end of 2012, the positions of jupiter, saturn, mercury, and deimos are aligned so as to cause a denormalized flush-to-zero bug when computing earth's gravitational force, slinging it to the sun.
What I'd like to be able to do is to render an entire scene with only one draw call similar to what you'd do in a Display List without having to use multiple draw calls. My problem is that I'm trying to simulate a push buffer using Direct3D. Anyone who's programmed for Xbox will understand what I mean. Sorry if I wasn't very clear before.
Use Direct3D 11 if you want this functionality. It has this functionality in its device contexts, and can be used with D3D9, 10 and 11 level of hardware (though D3D9 functionality is limited to shader model 2b).
Quote:Original post by blueshogun96
What I'd like to be able to do is to render an entire scene with only one draw call similar to what you'd do in a Display List without having to use multiple draw calls. My problem is that I'm trying to simulate a push buffer using Direct3D. Anyone who's programmed for Xbox will understand what I mean. Sorry if I wasn't very clear before.


I was more interested in why you need to do things this way. Unless you're working with D3D11, DirectX doesn't really have an equivalent for this (and even then you still have to pay the draw call cost for the commands in that buffer, all you're really doing is deferring them until later) and there are generally a number of viable ways in which you can cut down on draw call count depending on what effect you're trying to achieve.

Hence, more info please?
clb: At the end of 2012, the positions of jupiter, saturn, mercury, and deimos are aligned so as to cause a denormalized flush-to-zero bug when computing earth's gravitational force, slinging it to the sun.
Alright, here goes...

I'm working on an Xbox emulator. One of the key features of Xbox is the PushBuffer. It works very similar to the OpenGL Display List and the DirectX 3 ExecuteBuffer. One of the biggest things effecting speed is the PushBuffer emulation, and in some ways, Direct3D is not sufficient to emulate it properly, or at all. I'm going to port this project to OpenGL later on as the NV2x hardware is very OpenGL oriented and contains many features that are exclusive to OpenGL.
I agree that OpenGL is a good way to go, not only for functionality but because it's multiplatform. Still, DX11 would probably work well if you don't mind being limited to Windows Vista and 7.

Use Direct3D 11 if you want this functionality. It has this functionality in its device contexts, and can be used with D3D9, 10 and 11 level of hardware (though D3D9 functionality is limited to shader model 2b).

Could you be specific? Which mechanism/function/interface does D3D 11 provide to simulate OpenGL display list?
Hello, and welcome to 2 years ago :)

As for the question: ID3D11DeviceContext I would assume.

This topic is closed to new replies.

Advertisement