borgqueenx
Well-Known Member
someone said he(someone) would make a video showing off a game running right?
Is it on youtube already? or not?
Is it on youtube already? or not?
alrighty seems alot of optimalisations needs to be done though.WizardStan said:http://www.youtube.com/watch?v=ZggGMLBr2Oo
Running on an ipaq (different ARM based system) using software rendering, but it proves that it works
That's a freaking IPAQ... There probably aren't that many optimizations you could do...borgqueenx said:alrighty seems alot of optimalisations needs to be done though.WizardStan said:http://www.youtube.com/watch?v=ZggGMLBr2Oo
Running on an ipaq (different ARM based system) using software rendering, but it proves that it works
oh yeah and i was stopid to oversee that the IPAQ used software rendering. I also heard that was bad.dflemstr said:That's a freaking IPAQ... There probably aren't that many optimizations you could do...borgqueenx said:alrighty seems alot of optimalisations needs to be done though.WizardStan said:http://www.youtube.com/watch?v=ZggGMLBr2Oo
Running on an ipaq (different ARM based system) using software rendering, but it proves that it works
On the Pandora, on the other hand, the emulator will have access to the SGX, so there things will go a lot faster (they probably already do).
I was going to reply with a post starting with those exact words before i realized there was a 20th page . The IPAQ actually performs better than i expected.dflemstr said:That's a freaking IPAQ...
borgqueenx said:oh yeah and i was stopid to oversee that the IPAQ used software rendering. I also heard that was bad.dflemstr said:That's a freaking IPAQ... There probably aren't that many optimizations you could do...borgqueenx said:alrighty seems alot of optimalisations needs to be done though.WizardStan said:http://www.youtube.c...h?v=ZggGMLBr2Oo
Running on an ipaq (different ARM based system) using software rendering, but it proves that it works
On the Pandora, on the other hand, the emulator will have access to the SGX, so there things will go a lot faster (they probably already do).
Sorry!
Adventus said:I had a look into porting one of the various plugins. I don't think we will get great performance with a direct port. So all those expecting a video of fullspeed N64 should have some patience. Looking at Glide64 i'm surprised it works very well even on x86, it seems to begin/end render a lot of geometry a triangle at a time... like this:
for(i = 0; i < num; i++){
glBegin(GL_TRIANGLES)
glTexCoord2f(...); glVertex4f(....);
glTexCoord2f(...); glVertex4f(....);
glTexCoord2f(...); glVertex4f(....);
glEnd();
}
This is generally very inefficent and i can see no reason why this is neccessary. It also does most vertex transformations in software instead of using modelview matrix, etc. It does however do some nice things, for instance the glide wrapper dynamically generates fragment shaders to emulate blend modes. I actually compiled Glitch64 (the Glide Wrapper) with my OGL wrapper, but i'm currently just getting a black screen.
My biggest worry is we'll hit some crucial feature which is simply not present in OGLES 2.0 or EGL, I've already hit a few features in Glitch which aren't supported. I think it might be better if i try my wrapper on rice_video or something a little bit better written, either way it probably wont be fullspeed until a native port is done.
for(i = 0; i < num; i++){
glBegin(GL_TRIANGLES)
glTexCoord2f(...); glVertex4f(....);
glTexCoord2f(...); glVertex4f(....);
glTexCoord2f(...); glVertex4f(....);
glEnd();
}
Yes i know, perhaps i was a bit harsh. I also tend to say stupid things.* If you haven't noticed, Glitch64 is a Glide3x to OpenGL 1.5 wrapper. There is a reason why things are done the way they are done. If you have optimization ideas, I would love to hear how you will do things.
That appears to be the plugins fault. I was logging the commands for awhile and there was a huge number of grDrawTriangle calls without any state changes inbetween.Is this referring to the actual plugin or the wrapper?
If they're supported on the hardware your targetting, I would suggest using vertex arrays to buffer the vertices until a state change. The same applies to the grDrawVertexArray() stuff, convert it to an ogl format then render. Some drivers might be good at how your doing it but i wouldn't count on it.If you have optimization ideas, I would love to hear how you will do things.
I believe OpenGL ES 2.0 has FBO and NPOT support, at least in a partial sense. Its the write/read depthbuffer that i cannot support.* For unsupported things? You can omit FBO support or NPOT texture support, if you really want to...
Haha fair enough.There is a simple reason why I am so upset and critical: I consider things being attacked on which I worked on a couple of years for non stop, as a equivalent as a attack on my sexuality. So there.
ts the write/read depthbuffer that i cannot support.
That appears to be the plugins fault. I was logging the commands for awhile and there was a huge number of grDrawTriangle calls without any state changes inbetween.
Haha fair enough.
If they're supported on the hardware your targetting, I would suggest using vertex arrays to buffer the vertices until a state change. The same applies to the grDrawVertexArray() stuff, convert it to an ogl format then render. Some drivers might be good at how your doing it but i wouldn't count on it.
Adventus said:I believe OpenGL ES 2.0 has FBO and NPOT support, at least in a partial sense. Its the write/read depthbuffer that i cannot support.
Yea I'm a bit unsure about this. One thing i know is OGLES2 doesn't support writing to the depth buffer in the fragment shader, It also doesn't support glReadPixel() with GL_DEPTH_COMPONENT. However the raw FBO support is actually quite good (assuming there isn't any bugs). I'm not sure how critical these things are for Glide64.How come? I thought OGL ES2 did support this. If you're worried about SGX not supporting it then it does, although it's of course less efficient than the normal mode of operation.
You might be thinking of vertex buffer objects... I think Vertex Arrays were added to the standard spec in OpenGL 1.1 and before that could be accessed via the EXT_vertex_array extension. They should be supported on pretty much everything. But its your call, i cannot guarantee that it will be faster...and thats the problem. We want consistency. Though, its bad enough we have to do texture format hacks since ATI drivers completely suck, whereas Nvidia cards work as expected.
One thing i know is OGLES2 doesn't support writing to the depth buffer in the fragment shader, It also doesn't support glReadPixel() with GL_DEPTH_COMPONENT. However the raw FBO support is actually quite good (assuming there isn't any bugs). I'm not sure how critical these things are for Glide64.
mudlord said:They are critical for hardware framebuffer emulation. Especially the FBO/glCopyTexImage2D support and the depth writes it does with it. Some games render to the depth buffer for some special effects (Legend of Zelda Majora's Mask and Resident Evil 2). Many more games render to texture for framebuffer effects. So its pretty important for speed reasons on PCs. I'm not sure on the graphics bandwidth on your target though (like on the XBox, there is no issue, due to unified RAM).
How depth buffers with MM work with the LoT:
1. Render all visible objects
2. Copy depth buffer to another area
3. Render full screen rectangle with zero depth and a circle at the center with alpha compare. Circle has zero alpha and all pixels inside it are rejected by alpha compare. Thus, we have depth buffer with zero values everywhere outside the circle.
4. Render the objects, which supposed to be visible only in the LoT. Parts of the objects outside of the circle are rejected by depth compare.
5. Copy depth buffer back
6. Render snow and other foreground objects.
To emulate it I use regular frame buffer and 2 texture depth buffers. With Glide3x API it is simple. First, texture depth buffer created and used until 2. In 2. it is copied (rendered) to another area. In 5. it is copied (rendered) back from this area.
mudlord said:Here's some info from Gonetz as to how he does Majora's Mask's Lens of Truth (which uses the depth buffer)....
How depth buffers with MM work with the LoT:
1. Render all visible objects
2. Copy depth buffer to another area
3. Render full screen rectangle with zero depth and a circle at the center with alpha compare. Circle has zero alpha and all pixels inside it are rejected by alpha compare. Thus, we have depth buffer with zero values everywhere outside the circle.
4. Render the objects, which supposed to be visible only in the LoT. Parts of the objects outside of the circle are rejected by depth compare.
5. Copy depth buffer back
6. Render snow and other foreground objects.
To emulate it I use regular frame buffer and 2 texture depth buffers. With Glide3x API it is simple. First, texture depth buffer created and used until 2. In 2. it is copied (rendered) to another area. In 5. it is copied (rendered) back from this area.
So he uses pure depth format framebuffer textures and then does RTT in that case. RE2 uses pure depth format sprites for backgrounds and the plugin renders them with HWFBE IIRC.
Which is like how Crysis does screen-space ambient occlusion: it uses depth buffer textures which are created from the current rendered frame. Many games use normal (not depth) format textures in the same manner (TV screens, motion blur, HDR).