Page 1 of 1
How do you replace the screen contents in DrawWorld?
Posted: 25 Nov 2016, 19:39
by aeonios
I'm currently working on applying HDR to dynamic light rendering. Since spring doesn't support HDR by default this involved copying the screen texture to an offscreen HDR buffer, drawing the dynamic lights to that, apply tone mapping and then write the HDR texture back to the screen. This has to be done entirely during DrawWorld because, first it's the only time when you can use deferred rendering, and also because other things need to draw to the screen after that so the texture needs to be written back immediately and not during DrawScreenEffects.
Unfortunately it seems like texrect always wants to use worldspace coords during DrawWorld, and I can't figure out how to force it to use screenspace texcoords. Is there some way of getting around that?
Re: How do you replace the screen contents in DrawWorld?
Posted: 25 Nov 2016, 21:38
by Silentwings
Re: How do you replace the screen contents in DrawWorld?
Posted: 25 Nov 2016, 21:47
by Kloot
1) wrong; Draw{Units,Features,Ground}PostDeferred were added with a very specific purpose.
2) ever heard of {Push,Pop,Load,Mult}Matrix and LoadIdentity?
3) general protip: spend less time running your mouth about engine internals and more reading docs.
Re: How do you replace the screen contents in DrawWorld?
Posted: 25 Nov 2016, 22:05
by aeonios
Kloot wrote:1) wrong; Draw{Units,Features,Ground}PostDeferred were added with a very specific purpose.
A very undocumented purpose. Also they're only even called under certain special circumstances which do not apply to what I am doing. Also they are, respectively, for drawing units, features and ground, not the screen.
Kloot wrote:2) ever heard of {Push,Pop,Load,Mult}Matrix and LoadIdentity?
If it was raw openGL that would work, but this is openGL in the context of whatever spring happens to expect at any given time, which is an entirely different matter. I tried using glOrtho which not only did not work but it also screwed up the camera in strange ways.
It probably should have been screwed up anyway since I wasn't using the power-of-two size of the screen buffer, but the kind of screwed up it should have been and the kind I got were two different things.
TexRect also has a bunch of undocumented input params which I have no idea what they do. The deferred rendering widget seems to treat them as screen coords, but I did not have any success in doing so.
That does work for drawing a billboard centered at screen (0,0) but the texture width/height needs to be scaled in some non-intuitive way for it to fill the screen properly, and I have no idea how to do that.
Re: How do you replace the screen contents in DrawWorld?
Posted: 26 Nov 2016, 04:04
by Kloot
A very undocumented purpose.
Again, wrong...
Also they are, respectively, for drawing units, features and ground, not the screen.
Interesting narrative you've made up there, but "drawing" (as explained in the docu, which together with the event framework itself happens to have been written by me) is not their raison d'etre.
Also they're only even called under certain special circumstances which do not apply to what I am doing.
They do apply, you just lack the knowledge to recognize it.
The larger point, which you unsurprisingly also failed to pick up on, would be that DrawWorld
is not "the only time when you can use deferred rendering".
TexRect also has a bunch of undocumented input params
Nope, all possible parameters and their meanings are listed on
https://springrts.com/wiki/Lua_OpenGL_Api#Draw_Basics. Try thinking of an actually valid excuse or drop the BS.
If it was raw openGL that would work, but this is openGL in the context of whatever spring happens to expect
Spring expects only that its matrices (and other GL state) contain the same numbers at the end of DrawWorld as at the start, any code in between can be as raw or well-done as needed.
You seem eager to do things the hard way and I don't feel like riding more waves of fact-free creative nonsense, so gl and hf.
Re: How do you replace the screen contents in DrawWorld?
Posted: 27 Nov 2016, 20:09
by aeonios
Kloot wrote:The larger point, which you unsurprisingly also failed to pick up on, would be that DrawWorld is not "the only time when you can use deferred rendering".
That turns out to be the only useful thing you've said, albeit too late. I managed to get it to work by running the deferred shaders in DrawScreenEffects, which seems to work just as well, even though it makes for the most inside out and backwards deferred renderer ever.
Oh and if you want to talk about BS, if you think that the letters "s" and "t" count as 'documentation' or 'meaning' then you must be seriously delusional.