j.l.ocks
-
Posts
6 -
Joined
-
Last visited
Content Type
Blogs
Forums
Store
Gallery
Videos
Posts posted by j.l.ocks
-
-
Josh
I belive that MilliSecs() is a BlitzMax function, so I can not test it (I'm using VC++).
klepto2
Nope, closing fraps didn't help.
-
Metatron thank you for answer, but vsync was not "force on", it was "on unless specified". I changed it to "force off", but it didn't change anything.
P.S. On screenshot fps is higher then 60, its 71.
-
Ok. I think you will not understend me without any code, so i've simplified the programm, but problem still here.
here is the code
#include <time.h>
#include "engine.h"
#include "ProcessScene.h"
int width = 800;
int height = 600;
int main( int argn, char* argv[] )
{
//=============================================================
// Initializing the engine and graphics
//=============================================================
Initialize() ;
RegisterAbstractPath("E:/GameDev(zona17)/Leadwerks Engine SDK 2.40");
SetAppTitle( "Basic Shader Pack" ) ;
Graphics( width, height,0,60,GRAPHICS_BACKBUFFER|GRAPHICS_DEPTHBUFFER ) ;
int wb2 = width/2; // For center of the screen
int hb2 = height/2; // And some shaders
//=============================================================
// Initialize all the worlds and cameras
//=============================================================
// main world
TWorld world = CreateWorld() ;
if (!world) {
MessageBoxA(0,"Error","Failed to create world.",0);
return Terminate();
}
// main world camera
TCamera camera = CreateCamera();
CameraClearMode(camera,BUFFER_DEPTH|BUFFER_COLOR1|BUFFER_COLOR2);
// back world
TWorld backworld = CreateWorld();
// back world camera
TCamera backcamera = CreateCamera();
CameraClearMode(backcamera,BUFFER_COLOR|BUFFER_DEPTH);
//=============================================================
// Initialize all the buffers
//=============================================================
SetWorld(world);
// buffer for rendering worlds
TBuffer gbuffer = CreateBuffer(width,height,BUFFER_DEPTH|BUFFER_COLOR0|BUFFER_COLOR1|BUFFER_COLOR2);
TextureFilter(GetDepthBuffer(gbuffer),TEXFILTER_SMOOTH);
// buffer for rendering lights and post effects
TBuffer tePostbuffer = CreateBuffer(width,height,BUFFER_DEPTH|BUFFER_COLOR0|BUFFER_COLOR1);
// additional buffers for rendering post effects
TBuffer tempbuffer5 = CreateBuffer(width/16,height/16,BUFFER_COLOR);
TBuffer tempbuffer4 = CreateBuffer(width/8,height/8,BUFFER_COLOR);
TBuffer tempbuffer3 = CreateBuffer(width/4,height/4,BUFFER_COLOR);
TBuffer tempbuffer2 = CreateBuffer(width/2,height/2,BUFFER_COLOR);
TBuffer tempbuffer1 = CreateBuffer(width,height,BUFFER_COLOR);
TextureFilter(GetColorBuffer(tempbuffer2),TEXFILTER_SMOOTH);
TextureFilter(GetColorBuffer(tempbuffer3),TEXFILTER_SMOOTH);
TextureFilter(GetColorBuffer(tempbuffer4),TEXFILTER_SMOOTH);
TextureFilter(GetColorBuffer(tempbuffer5),TEXFILTER_SMOOTH);
TBuffer bluredbuffer5 = CreateBuffer(width/16,height/16,BUFFER_COLOR);
TBuffer bluredbuffer4 = CreateBuffer(width/8,height/8,BUFFER_COLOR);
TBuffer bluredbuffer3 = CreateBuffer(width/4,height/4,BUFFER_COLOR);
TBuffer bluredbuffer2 = CreateBuffer(width/2,height/2,BUFFER_COLOR);
TBuffer bluredbuffer1 = CreateBuffer(width,height,BUFFER_COLOR);
TBuffer downcolor4 = CreateBuffer(width/8,height/8,BUFFER_COLOR);
TBuffer downcolor3 = CreateBuffer(width/4,height/4,BUFFER_COLOR);
TBuffer downcolor2 = CreateBuffer(width/2,height/2,BUFFER_COLOR);
//=============================================================
// Initialize all the shaders
//=============================================================
// Bluring shader
TShader teBlurPass = LoadShader("abstract::tePost.vert","abstract::teBlurPass.frag");
// Just draw it
TShader teNoShader = LoadShader("abstract::tePost.vert","abstract::teNoShader.frag");
// Anti Aliasing shaders
TShader teAA = LoadShader("abstract::tePost.vert","abstract::teAA.frag");
TShader teEdgeDetection = LoadShader("abstract::tePost.vert","abstract::teEdgeDetection.frag");
TShader teEdgeDeletion = LoadShader("abstract::tePost.vert","abstract::teEdgeDeletion.frag");
// Up and Down scaling shders
TShader teUpPass = LoadShader("abstract::tePost.vert","abstract::teUpPass.frag");
TShader teDownPass = LoadShader("abstract::tePost.vert","abstract::teDownPass.frag");
// Bloom shaders
TShader teBloomPass = LoadShader("abstract::tePost.vert","abstract::teBloomPass.frag");
TShader teBloomRender = LoadShader("abstract::tePost.vert","abstract::teBloomRender.frag");
// Sky and Sun rendering shaders
TShader teSkyRender = LoadShader("abstract::teSkyRender.vert","abstract::teSkyRender.frag");
TShader teSkyBlurPass = LoadShader("abstract::tePost.vert","abstract::teSkyBlurPass.frag");
// Sun Shafts shaders
TShader teSunShaftsPass = LoadShader("abstract::tePost.vert","abstract::teSunShaftsPass.frag");
TShader teSunShaftsRender = LoadShader("abstract::tePost.vert","abstract::teSunShaftsRender.frag");
// Texture for noise
TTexture noisemap = LoadTexture("abstract::noise.dds");
//=============================================================
// Initialize sun and sky
//=============================================================
SetWorld(world);
TLight thesun = CreateDirectionalLight();
RotateEntity(thesun,Vec3(170.0f,35.0f,0.0f));
MoveEntity(thesun,Vec3(0.0,0.0,5000.0f));
EntityColor(thesun,Vec4(0.0f,0.0f,0.0f,1.0f));
AmbientLight(Vec3(0.2f,0.2f,0.4f));
SetShadowDistance(thesun, 8, 0);
SetShadowDistance(thesun, 32, 1);
SetShadowDistance(thesun, 128, 2);
SetShadowOffset(thesun, 0.1f, 0.99935f, 0);
SetShadowOffset(thesun, 0.2f, 0.99935f, 1);
SetShadowOffset(thesun, 0.3f, 0.99935f, 2);
SetShadowmapSize(thesun,1024);
SetWorld(backworld);
TMaterial skymat = LoadMaterial("abstract::skynight.mat");
TEntity skybox = CreateCube();
FlipMesh(skybox);
PaintEntity(skybox,skymat);
//=============================================================
// Initialize scene and Controller
//=============================================================
SetWorld(world);
OcclusionCulling(0);
Collisions(1,1,true);
Collisions(1,2,true);
TEntity mainscene = LoadScene("abstract::testscene2.sbx");
ProcessScene(mainscene);
EntityType(mainscene,2);
SetVegetationShadowMode(1);
TController character = CreateController(1.8f,0.4f,0.5f,45.01f);
SetBodyDamping(character,0.0f,0.0f);
SetWorldGravity(Vec3(0.0f,-10.0f,0.0f));
SetBodyMass(character,65.0f);
EntityType(character,1);
EntityParent(camera,character);
PositionEntity(camera,Vec3(0.0f,1.75f,0.0f));
PositionEntity(character,Vec3(5.0f,15.0f,5.0f));
int mx=wb2;
int my=hb2;
float move=0;
float strafe=0;
TVec3 camerarot = Vec3(0.0f);
clock_t start = 0;
clock_t delta = 0;
clock_t totalstart = 0;
int frames = 0;
TVec3 sunpos;
MoveMouse(wb2,hb2);
// Game loop
while( !KeyHit() && !AppTerminate() )
{
if( !AppSuspended() ) // We are not in focus!
{
//=============================================================
// Update Contorls
//=============================================================
totalstart = clock();
SetWorld(world);
mx = MouseX() - wb2;
my = MouseY() - hb2;
MoveMouse(wb2,hb2);
camerarot.X += my/5.0f;
camerarot.Y -= mx/5.0f;
RotateEntity(camera,Vec3(camerarot.X,0,0));
RotateEntity(backcamera,camerarot);
move = float(KeyDown(KEY_W) - KeyDown(KEY_S));
strafe = float(KeyDown(KEY_D) - KeyDown(KEY_A));
move*=4;
strafe*=4;
UpdateController(character,camerarot.Y,move,strafe,0,40);
//=============================================================
// Update Worlds and cameras
//=============================================================
UpdateAppTime();
SetWorld(world);
UpdateWorld(AppSpeed());
//=============================================================
// Render sky and sun
//=============================================================
sunpos = EntityPosition(thesun);
SetShaderVec4(teSkyRender,"skycolor",Vec4(0.2f,0.2f,0.4f,1.0f));
SetShaderVec4(teSkyRender,"skycolorh",Vec4(0.5f,0.3f,0.1f,1.0f));
SetShaderVec3(teSkyRender,"suncolor",Vec3(2.0f,1.2f,0.4f));
SetShaderVec3(teSkyRender,"sundir",Vec3(0.0)-sunpos);
SetWorld(backworld);
SetBuffer(gbuffer);
RenderWorld();
//=============================================================
// Render main world
//=============================================================
SetWorld(world);
SetBuffer(gbuffer);
RenderWorld();
//=============================================================
// Render Lights
//=============================================================
SetWorld(world);
SetBuffer(tePostbuffer);
RenderLights(gbuffer);
//=============================================================
// Render Bloom And Sun Shafts
//=============================================================
//=============================================================
// Down Scaling Frame Buffer
//=============================================================
SetBuffer(downcolor2);
SetShader(teDownPass);
DrawImage(GetColorBuffer(tePostbuffer),0,height,width,-height);
SetBuffer(downcolor3);
SetShader(teDownPass);
DrawImage(GetColorBuffer(downcolor2),0,height,width,-height);
SetBuffer(downcolor4);
SetShader(teDownPass);
DrawImage(GetColorBuffer(downcolor3),0,height,width,-height);
//=============================================================
// Blooming
//=============================================================
SetBuffer(bluredbuffer4);
SetShader(teBloomPass);
SetShaderFloat(teBloomPass,"direction",1.0f);
SetShaderFloat(teBloomPass,"darkness",0.0f);
SetShaderFloat(teBloomPass,"numsteps",16.0f);
DrawImage(GetColorBuffer(downcolor4),0,height,width,-height);
SetBuffer(tempbuffer4);
SetShader(teBloomPass);
SetShaderFloat(teBloomPass,"direction",0.0);
SetShaderFloat(teBloomPass,"darkness",5.0f);
SetShaderFloat(teBloomPass,"numsteps",16.0f);
DrawImage(GetColorBuffer(bluredbuffer4),0,height,width,-height);
SetBuffer(bluredbuffer3);
SetShader(teBloomPass);
SetShaderFloat(teBloomPass,"direction",1.0f);
SetShaderFloat(teBloomPass,"darkness",0.0f);
SetShaderFloat(teBloomPass,"numsteps",16.0f);
DrawImage(GetColorBuffer(downcolor3),0,height,width,-height);
SetBuffer(tempbuffer3);
SetShader(teBloomPass);
SetShaderFloat(teBloomPass,"direction",0.0);
SetShaderFloat(teBloomPass,"darkness",5.0f);
SetShaderFloat(teBloomPass,"numsteps",16.0f);
DrawImage(GetColorBuffer(bluredbuffer3),0,height,width,-height);
SetBuffer(bluredbuffer2);
SetShader(teBloomPass);
SetShaderFloat(teBloomPass,"direction",1.0f);
SetShaderFloat(teBloomPass,"darkness",0.0f);
SetShaderFloat(teBloomPass,"numsteps",16.0f);
DrawImage(GetColorBuffer(downcolor2),0,height,width,-height);
SetBuffer(tempbuffer2);
SetShader(teBloomPass);
SetShaderFloat(teBloomPass,"direction",0.0);
SetShaderFloat(teBloomPass,"darkness",5.0f);
SetShaderFloat(teBloomPass,"numsteps",16.0f);
DrawImage(GetColorBuffer(bluredbuffer2),0,height,width,-height);
//=============================================================
// Up Scaling Bloom Buffer
//=============================================================
SetBuffer(tempbuffer3);
SetShader(teUpPass);
SetShaderFloat(teUpPass,"blend",1.0f/2.0f);
BindTexture(GetColorBuffer(tempbuffer4),4);
DrawImage(GetColorBuffer(tempbuffer3),0,height,width,-height);
SetBuffer(tempbuffer2);
SetShader(teUpPass);
SetShaderFloat(teUpPass,"blend",1.0f/3.0f);
BindTexture(GetColorBuffer(tempbuffer3),4);
DrawImage(GetColorBuffer(tempbuffer2),0,height,width,-height);
//=============================================================
// Render Bloom to Screen
//=============================================================
SetBuffer(tePostbuffer);
SetShader(teBloomRender);
SetShaderFloat(teBloomRender,"bloomstr",0.5f);
SetShaderVec4(teBloomRender,"bloomcolor",Vec4(1.0,1.0,1.0,1.0));
BindTexture(GetColorBuffer(tempbuffer2),4);
DrawImage(GetColorBuffer(tePostbuffer),0,height,width,-height);
//=============================================================
// Sun Shafts
//=============================================================
SetBuffer(tempbuffer2);
SetShader(teSunShaftsPass);
sunpos = CameraUnproject(camera,Vec3(0.0)-EntityPosition(thesun));
SetShaderFloat(teSunShaftsPass,"skyonly",1.0f);
SetShaderFloat(teSunShaftsPass,"darkness",2.0f);
SetShaderFloat(teSunShaftsPass,"numsteps",16.0f);
SetShaderFloat(teSunShaftsPass,"step",0.75f);
SetShaderVec3(teSunShaftsPass,"sundir",sunpos);
DrawImage(GetColorBuffer(downcolor2),0,height,width,-height);
SetBuffer(bluredbuffer3);
SetShader(teUpPass);
SetShaderFloat(teUpPass,"blend",0.0f);
BindTexture(GetColorBuffer(tempbuffer2),4);
DrawImage(GetColorBuffer(tempbuffer3),0,height,width,-height);
SetBuffer(tempbuffer3);
SetShader(teSunShaftsPass);
sunpos = CameraUnproject(camera,Vec3(0.0)-EntityPosition(thesun));
SetShaderFloat(teSunShaftsPass,"skyonly",0.0f);
SetShaderFloat(teSunShaftsPass,"darkness",0.0f);
SetShaderFloat(teSunShaftsPass,"numsteps",16.0f);
SetShaderFloat(teSunShaftsPass,"step",0.5f);
SetShaderVec3(teSunShaftsPass,"sundir",sunpos);
DrawImage(GetColorBuffer(bluredbuffer3),0,height,width,-height);
SetBuffer(bluredbuffer2);
SetShader(teUpPass);
SetShaderFloat(teUpPass,"blend",0.0f);
BindTexture(GetColorBuffer(tempbuffer3),4);
DrawImage(GetColorBuffer(tempbuffer2),0,height,width,-height);
SetBuffer(tempbuffer2);
SetShader(teSunShaftsPass);
sunpos = CameraUnproject(camera,Vec3(0.0)-EntityPosition(thesun));
SetShaderFloat(teSunShaftsPass,"skyonly",0.0f);
SetShaderFloat(teSunShaftsPass,"darkness",0.0f);
SetShaderFloat(teSunShaftsPass,"numsteps",16.0f);
SetShaderFloat(teSunShaftsPass,"step",0.25f);
SetShaderVec3(teSunShaftsPass,"sundir",sunpos);
DrawImage(GetColorBuffer(bluredbuffer2),0,height,width,-height);
//=============================================================
// Render Sun Shafts to Screen
//=============================================================
SetBuffer(tePostbuffer);
SetShader(teSunShaftsRender);
SetShaderFloat(teSunShaftsRender,"sunshaftsstr",0.5f);
SetShaderVec4(teSunShaftsRender,"sunshaftscolor",Vec4(1.0,1.0,1.0,1.0));
BindTexture(GetColorBuffer(tempbuffer2),4);
DrawImage(GetColorBuffer(tePostbuffer),0,height,width,-height);
//=============================================================
// Render Multi-Sample Anti-Aliasing
//=============================================================
SetBuffer(tempbuffer1);
SetShader(teEdgeDetection);
BindTexture(GetDepthBuffer(gbuffer),1);
DrawImage(GetColorBuffer(tePostbuffer),0,height,width,-height);
SetBuffer(tempbuffer1);
SetShader(teEdgeDeletion);
BindTexture(GetDepthBuffer(gbuffer),1);
DrawImage(GetColorBuffer(tempbuffer1),0,height,width,-height);
SetBuffer(BackBuffer());
SetShader(teAA);
BindTexture(GetDepthBuffer(gbuffer),1);
BindTexture(GetColorBuffer(tempbuffer1),4);
DrawImage(GetColorBuffer(tePostbuffer),0,height,width,-height);
printf("total: %d\n", clock()-totalstart);
//=============================================================
// Send To Screen
//=============================================================
start = clock();
Flip(0) ;
printf("flip: %d\n", clock()-start);
}
}
// Done
return Terminate() ;
}
It's long, so under spoiler.
Now the rendering time is around 3-4 millisecond, and flip time is around 9-10 milliseconds, a lot higher then the rendering time.
What could be the problem?
Screenshot:
-
May be it's a little misunderstanding. I'm trying to find out why this particular bit of code takes 30 milliseconds of time.
I call clock() function right before Flip(0), and than, right after Flip(0) i call clock() again. Difference between this two moments in time is 30 milliseconds. That means that Flip(0) function is slowing down the programm.
Basically, programm looks like this
int main( int argn, char* argv[] ){ // some initialization code while( !KeyHit() && !AppTerminate() ) // main loop start = clock(); //===================================== // A lot of rendering code //===================================== printf("rendering time: %d\n", clock()-start); // the result in output window is around 11-12 start = clock(); Flip(0); printf("flip time: %d\n", clock()-start); // the result in output window is around 29-30 } }
So Flip(0) function takes more time then all the rendering code. How can it be? Why Flip(0) function takes so long to process?
I have a guess, that Flip(0) is so slow, because of using a lot of different buffers of different size, can it be a problem? Does Flip(0) clear all the buffers when called or something like that?
-
Hello everyone. I have a question about Flip function.
In my programm the render time is about 11-12 milliseconds (i cannot show you the code), and the flip time is about 29-30 milliseconds. And by saying flip time i mean
start = clock(); Flip(0) ; printf("flip: %d\n", clock()-start);
And it takes 30 milliseconds.
So the question is: how can it be?
If it's important, i use a lot of buffers of different sizes.
P.S. VC++, LE 2.4
Flip takes 30 ms o_O
in General Discussion
Posted
klepto2
it makes sense, but how can i perform and calculate process time of post effects, before renderworld is finished?