Lol its ok monkey, Im sure you would've upgraded by then...monkeycracks wrote:They're going to have shaders instead of food eventually.
-.-
Irrlicht Engines Graphical limitations?
are there any plans about implementing hardware buffers?
gpu buffers suppot is really needed at least for static objects.
we have chosen TGE for our 3d game because of perfomance issue.
as for me, irrlicht design is rather good for casual game development
if you need help in implementing i can help.
gpu buffers suppot is really needed at least for static objects.
we have chosen TGE for our 3d game because of perfomance issue.
as for me, irrlicht design is rather good for casual game development
if you need help in implementing i can help.
-
- Admin
- Posts: 14143
- Joined: Wed Apr 19, 2006 9:20 pm
- Location: Oldenburg(Oldb), Germany
- Contact:
The question is how to hide the various implementations of hardware buffers together with their attributes behind a simple and intuitive API. I don't think that it is a good idea to make people call several functions such as 'useHardwareBuffer', 'updateVertexBuffer' etc. This brings too much implementation to the user level. If these functions are accessible by the user it's ok, but the basic feature should be almost transparent to the user.
How then were hidden various texture implementations?
I see no problem, everything is already hidden from user.
As for functions such as 'useHardwareBuffer', 'updateVertexBuffer':
it would be nice if device supports a flag "useHardwareBuffer",
anyway if user modify buffer data manually, he know that he's doing.
we can synchronize hardware buffers after call of func like "updateVertexBuffer"
e.g. we use lock unlock to modify texture data, it would be better if IMeshBuffer interface supports lockVertexBuffer(), unlockVertexBuffer and... to do any modifications; getVertices() updateVertices() pair can do the same.
Also it is possible to implement IMeshBuffer for drivers and do appropriate work in driver->drawMeshBuffer(mb);
CMeshSceneNode, CWaterSurfaceSceneNode, CQuake3ShaderSceneNode uses drawMeshBuffer for rendering, CTerrainSceneNode also can use drawMeshBuffer with minimal changes, COctTreeSceneNode needs some work.
I see no problem, everything is already hidden from user.
As for functions such as 'useHardwareBuffer', 'updateVertexBuffer':
it would be nice if device supports a flag "useHardwareBuffer",
anyway if user modify buffer data manually, he know that he's doing.
we can synchronize hardware buffers after call of func like "updateVertexBuffer"
e.g. we use lock unlock to modify texture data, it would be better if IMeshBuffer interface supports lockVertexBuffer(), unlockVertexBuffer and... to do any modifications; getVertices() updateVertices() pair can do the same.
Also it is possible to implement IMeshBuffer for drivers and do appropriate work in driver->drawMeshBuffer(mb);
CMeshSceneNode, CWaterSurfaceSceneNode, CQuake3ShaderSceneNode uses drawMeshBuffer for rendering, CTerrainSceneNode also can use drawMeshBuffer with minimal changes, COctTreeSceneNode needs some work.
Omaremads' implementation of OpenGL display lists was done really well from an interface standpoint I think. You just grab the mesh buffer and do meshbuffer.DisplayList = true;.hybrid wrote:The question is how to hide the various implementations of hardware buffers together with their attributes behind a simple and intuitive API. I don't think that it is a good idea to make people call several functions such as 'useHardwareBuffer', 'updateVertexBuffer' etc. This brings too much implementation to the user level. If these functions are accessible by the user it's ok, but the basic feature should be almost transparent to the user.
For abstraction irrlicht should add a static mesh type, that way the user tells irrlicht what is required of the mesh but has to know nothing about whats isnide the driver classes. We cant do evrything for the user, if a user is serious about performance im sure they dont mind decalring their meshes as say IStaticMesh rather than IMesh
"Irrlicht is obese"
If you want modern rendering techniques learn how to make them or go to the engine next door =p
If you want modern rendering techniques learn how to make them or go to the engine next door =p
Implementing hardware vertex/index buffers ideally should be done in the same way as device-depended textures are implemented, but this is a lot of work.
What about extending IMeshBuffer interface?
Device-depended IHVertexBuffer, IHIndexBuffer can be added
While doing drawMeshBuffer(mb) device can check if HBuffers present and do appropriate call
IMeshBuffer should have "uploadToDevice" function.
If user wants to modify any data, he should call lock/unlock pair, but IMeshBuffer has only lock func (getVert...).
What about extending IMeshBuffer interface?
Device-depended IHVertexBuffer, IHIndexBuffer can be added
While doing drawMeshBuffer(mb) device can check if HBuffers present and do appropriate call
IMeshBuffer should have "uploadToDevice" function.
If user wants to modify any data, he should call lock/unlock pair, but IMeshBuffer has only lock func (getVert...).
Code: Select all
class IMeshBuffer ...
{
...
IHVertexBuffer* getHVertexBuffer();
IHIndexBuffer * getHIndexBuffer();
bool uploadHBuffers(device);
...
};
CNullDriver::drawMeshBuffer(mb)
{
if (mb->getHVertexBuffer() && mb->getHIndexBuffer())
{
drawHMeshBuffer(mb);
return;
}
drawVertexPrimitiveList(mb->getVertices(), mb->getVertexCount(), mb->getIndices(), mb->getIndexCount()/3, mb->getVertexType(), scene::EPT_TRIANGLES);
}
Thats a bit restricting. You see openGL has these VertexArrays right? and what you can do is you can ->lock(); them, and after the point they are locked u cannot modfy them and they are considered static. They are also cached for every frame after than until you unlock them.omaremad wrote:For abstraction irrlicht should add a static mesh type, that way the user tells irrlicht what is required of the mesh but has to know nothing about whats isnide the driver classes. We cant do evrything for the user, if a user is serious about performance im sure they dont mind decalring their meshes as say IStaticMesh rather than IMesh
This idea is less restricting then making a mesh permanently static because of its type. Instead, similar to the Irrlicht texture->lock/unlock methodology where you unlock textures in order to modify them, we should do the exact same for meshes.
Cheers
EDIT: Oh looks like zet.dp.ua beat me to it. Smart guy
(I hope this means its a good idea kuz like they say "Great minds think alike" hahaha)
-
- Posts: 616
- Joined: Wed Nov 01, 2006 6:26 pm
- Location: Cairo,Egypt
- Contact:
Direct x 10 is buggy and if u download it or get it with vista u will find that it will run so bad and with many errors and will take time untill it is fully compatiblekburkhart84 wrote:I'm surprised that IrrSpintz hasn't mentioned this here, but he has got DX10 working in IrrSpintz, so it is definetly possible. It's just not too usable yet anyway since most people still don't have the hardware.
Exactly, i also think so after reviewing rendering code blocks.BlindSide wrote: This idea is less restricting then making a mesh permanently static because of its type. Instead, similar to the Irrlicht texture->lock/unlock methodology where you unlock textures in order to modify them, we should do the exact same for meshes.
IMeshBuffer::getVertices()/getIndices() funcs give direct access to data.
"Unlock"-like function should be added to update HW buffers.
From my point of view (i'm newbee to Irrlicht),
only one way to implement HW buffers support without breaking semantic of getVertices()/getIndices() is adding some update function which should be called automatically by mesh loaders or by user after buffer was changed.
What are Irrlicht's developers thinking about it?