Graphics API events marked throughout the engine
This commit is contained in:
@@ -165,9 +165,6 @@
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)wiImageEffects.h">
|
||||
<Filter>ENGINE</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)wiFont.h">
|
||||
<Filter>ENGINE</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)wiDepthTarget.h">
|
||||
<Filter>ENGINE</Filter>
|
||||
</ClInclude>
|
||||
@@ -1026,6 +1023,9 @@
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)wiSprite.h">
|
||||
<Filter>ENGINE\Graphics</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)wiFont.h">
|
||||
<Filter>ENGINE\Graphics</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)LUA\lapi.c">
|
||||
@@ -1157,9 +1157,6 @@
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)wiHelper.cpp">
|
||||
<Filter>ENGINE</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)wiFont.cpp">
|
||||
<Filter>ENGINE</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)wiSound.cpp">
|
||||
<Filter>ENGINE</Filter>
|
||||
</ClCompile>
|
||||
@@ -1781,6 +1778,9 @@
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)wiSprite.cpp">
|
||||
<Filter>ENGINE\Graphics</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)wiFont.cpp">
|
||||
<Filter>ENGINE\Graphics</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="$(MSBuildThisFileDirectory)fonts\basic.dds">
|
||||
|
||||
@@ -236,20 +236,23 @@ void wiEmittedParticle::Draw(Camera* camera, GRAPHICSTHREAD threadID, int FLAG)
|
||||
if(!points.empty()){
|
||||
|
||||
|
||||
if(camera->frustum.CheckBox(bounding_box->corners)){
|
||||
if(camera->frustum.CheckBox(bounding_box->corners))
|
||||
{
|
||||
GraphicsDevice* device = wiRenderer::GetDevice();
|
||||
device->EventBegin(L"EmittedParticle");
|
||||
|
||||
vector<Point> renderPoints=vector<Point>(points.begin(),points.end());
|
||||
wiRenderer::GetDevice()->UpdateBuffer(vertexBuffer,renderPoints.data(),threadID,sizeof(Point)* renderPoints.size());
|
||||
device->UpdateBuffer(vertexBuffer,renderPoints.data(),threadID,sizeof(Point)* renderPoints.size());
|
||||
|
||||
bool additive = (material->blendFlag==BLENDMODE_ADDITIVE || material->premultipliedTexture);
|
||||
|
||||
wiRenderer::GetDevice()->BindPrimitiveTopology(PRIMITIVETOPOLOGY::POINTLIST,threadID);
|
||||
wiRenderer::GetDevice()->BindVertexLayout(vertexLayout,threadID);
|
||||
wiRenderer::GetDevice()->BindPS(wireRender?simplestPS:pixelShader,threadID);
|
||||
wiRenderer::GetDevice()->BindVS(vertexShader,threadID);
|
||||
wiRenderer::GetDevice()->BindGS(geometryShader,threadID);
|
||||
device->BindPrimitiveTopology(PRIMITIVETOPOLOGY::POINTLIST,threadID);
|
||||
device->BindVertexLayout(vertexLayout,threadID);
|
||||
device->BindPS(wireRender?simplestPS:pixelShader,threadID);
|
||||
device->BindVS(vertexShader,threadID);
|
||||
device->BindGS(geometryShader,threadID);
|
||||
|
||||
//wiRenderer::GetDevice()->BindResourcePS(depth,1,threadID);
|
||||
//device->BindResourcePS(depth,1,threadID);
|
||||
|
||||
ConstantBuffer cb;
|
||||
cb.mAdd.x = additive;
|
||||
@@ -257,22 +260,23 @@ void wiEmittedParticle::Draw(Camera* camera, GRAPHICSTHREAD threadID, int FLAG)
|
||||
cb.mMotionBlurAmount = motionBlurAmount;
|
||||
|
||||
|
||||
wiRenderer::GetDevice()->UpdateBuffer(constantBuffer,&cb,threadID);
|
||||
wiRenderer::GetDevice()->BindConstantBufferGS(constantBuffer, CB_GETBINDSLOT(ConstantBuffer),threadID);
|
||||
device->UpdateBuffer(constantBuffer,&cb,threadID);
|
||||
device->BindConstantBufferGS(constantBuffer, CB_GETBINDSLOT(ConstantBuffer),threadID);
|
||||
|
||||
wiRenderer::GetDevice()->BindRasterizerState(wireRender?wireFrameRS:rasterizerState,threadID);
|
||||
wiRenderer::GetDevice()->BindDepthStencilState(depthStencilState,1,threadID);
|
||||
device->BindRasterizerState(wireRender?wireFrameRS:rasterizerState,threadID);
|
||||
device->BindDepthStencilState(depthStencilState,1,threadID);
|
||||
|
||||
wiRenderer::GetDevice()->BindBlendState((additive?blendStateAdd:blendStateAlpha),threadID);
|
||||
device->BindBlendState((additive?blendStateAdd:blendStateAlpha),threadID);
|
||||
|
||||
wiRenderer::GetDevice()->BindVertexBuffer(vertexBuffer,0,sizeof(Point),threadID);
|
||||
device->BindVertexBuffer(vertexBuffer,0,sizeof(Point),threadID);
|
||||
|
||||
if(!wireRender && material->texture)
|
||||
wiRenderer::GetDevice()->BindResourcePS(material->texture,TEXSLOT_ONDEMAND0,threadID);
|
||||
wiRenderer::GetDevice()->Draw(renderPoints.size(),threadID);
|
||||
device->BindResourcePS(material->texture,TEXSLOT_ONDEMAND0,threadID);
|
||||
device->Draw(renderPoints.size(),threadID);
|
||||
|
||||
|
||||
wiRenderer::GetDevice()->BindGS(nullptr,threadID);
|
||||
device->BindGS(nullptr,threadID);
|
||||
device->EventEnd();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+20
-15
@@ -261,31 +261,36 @@ void wiFont::Draw(GRAPHICSTHREAD threadID){
|
||||
|
||||
ModifyGeo(text, newProps, style, threadID);
|
||||
|
||||
if(text.length()>0){
|
||||
if(text.length()>0)
|
||||
{
|
||||
GraphicsDevice* device = wiRenderer::GetDevice();
|
||||
device->EventBegin(L"Font");
|
||||
|
||||
wiRenderer::GetDevice()->BindPrimitiveTopology(PRIMITIVETOPOLOGY::TRIANGLELIST,threadID);
|
||||
wiRenderer::GetDevice()->BindVertexLayout(vertexLayout,threadID);
|
||||
wiRenderer::GetDevice()->BindVS(vertexShader,threadID);
|
||||
wiRenderer::GetDevice()->BindPS(pixelShader,threadID);
|
||||
device->BindPrimitiveTopology(PRIMITIVETOPOLOGY::TRIANGLELIST,threadID);
|
||||
device->BindVertexLayout(vertexLayout,threadID);
|
||||
device->BindVS(vertexShader,threadID);
|
||||
device->BindPS(pixelShader,threadID);
|
||||
|
||||
|
||||
ConstantBuffer cb;
|
||||
cb.mProjection = XMMatrixTranspose( XMMatrixOrthographicLH((float)wiRenderer::GetDevice()->GetScreenWidth(),(float)wiRenderer::GetDevice()->GetScreenHeight(),0,100) );
|
||||
cb.mProjection = XMMatrixTranspose( XMMatrixOrthographicLH((float)device->GetScreenWidth(),(float)device->GetScreenHeight(),0,100) );
|
||||
cb.mTrans = XMMatrixTranspose(XMMatrixTranslation(newProps.posX, newProps.posY, 0));
|
||||
cb.mDimensions = XMFLOAT4((float)wiRenderer::GetDevice()->GetScreenWidth(), (float)wiRenderer::GetDevice()->GetScreenHeight(), 0, 0);
|
||||
cb.mDimensions = XMFLOAT4((float)device->GetScreenWidth(), (float)device->GetScreenHeight(), 0, 0);
|
||||
|
||||
wiRenderer::GetDevice()->UpdateBuffer(constantBuffer,&cb,threadID);
|
||||
device->UpdateBuffer(constantBuffer,&cb,threadID);
|
||||
|
||||
|
||||
wiRenderer::GetDevice()->BindRasterizerState(rasterizerState,threadID);
|
||||
wiRenderer::GetDevice()->BindDepthStencilState(depthStencilState,1,threadID);
|
||||
device->BindRasterizerState(rasterizerState,threadID);
|
||||
device->BindDepthStencilState(depthStencilState,1,threadID);
|
||||
|
||||
wiRenderer::GetDevice()->BindBlendState(blendState,threadID);
|
||||
wiRenderer::GetDevice()->BindVertexBuffer(vertexBuffer,0,sizeof(Vertex),threadID);
|
||||
wiRenderer::GetDevice()->BindIndexBuffer(indexBuffer,threadID);
|
||||
device->BindBlendState(blendState,threadID);
|
||||
device->BindVertexBuffer(vertexBuffer,0,sizeof(Vertex),threadID);
|
||||
device->BindIndexBuffer(indexBuffer,threadID);
|
||||
|
||||
wiRenderer::GetDevice()->BindResourcePS(fontStyles[style].texture,TEXSLOT_ONDEMAND0,threadID);
|
||||
wiRenderer::GetDevice()->DrawIndexed(text.length()*6,threadID);
|
||||
device->BindResourcePS(fontStyles[style].texture,TEXSLOT_ONDEMAND0,threadID);
|
||||
device->DrawIndexed(text.length()*6,threadID);
|
||||
|
||||
device->EventEnd();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -399,21 +399,24 @@ void wiHairParticle::Draw(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
|
||||
if(!culledPatches.empty())
|
||||
{
|
||||
GraphicsDevice* device = wiRenderer::GetDevice();
|
||||
device->EventBegin(L"HairParticle");
|
||||
|
||||
Texture2D* texture = material->texture;
|
||||
|
||||
wiRenderer::GetDevice()->BindPrimitiveTopology(PRIMITIVETOPOLOGY::POINTLIST,threadID);
|
||||
wiRenderer::GetDevice()->BindVertexLayout(il,threadID);
|
||||
wiRenderer::GetDevice()->BindPS(texture?qps:ps,threadID);
|
||||
wiRenderer::GetDevice()->BindVS(vs,threadID);
|
||||
device->BindPrimitiveTopology(PRIMITIVETOPOLOGY::POINTLIST,threadID);
|
||||
device->BindVertexLayout(il,threadID);
|
||||
device->BindPS(texture?qps:ps,threadID);
|
||||
device->BindVS(vs,threadID);
|
||||
|
||||
if(texture){
|
||||
wiRenderer::GetDevice()->BindResourcePS(texture,TEXSLOT_ONDEMAND0,threadID);
|
||||
wiRenderer::GetDevice()->BindResourceGS(texture,TEXSLOT_ONDEMAND0,threadID);
|
||||
device->BindResourcePS(texture,TEXSLOT_ONDEMAND0,threadID);
|
||||
device->BindResourceGS(texture,TEXSLOT_ONDEMAND0,threadID);
|
||||
|
||||
wiRenderer::GetDevice()->BindBlendState(bs,threadID);
|
||||
device->BindBlendState(bs,threadID);
|
||||
}
|
||||
else
|
||||
wiRenderer::GetDevice()->BindRasterizerState(ncrs,threadID);
|
||||
device->BindRasterizerState(ncrs,threadID);
|
||||
|
||||
|
||||
ConstantBuffer gcb;
|
||||
@@ -421,10 +424,10 @@ void wiHairParticle::Draw(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
gcb.color=material->diffuseColor;
|
||||
gcb.drawdistance = (float)LOD[2];
|
||||
|
||||
wiRenderer::GetDevice()->UpdateBuffer(cbgs,&gcb,threadID);
|
||||
wiRenderer::GetDevice()->BindConstantBufferGS(cbgs, CB_GETBINDSLOT(ConstantBuffer),threadID);
|
||||
device->UpdateBuffer(cbgs,&gcb,threadID);
|
||||
device->BindConstantBufferGS(cbgs, CB_GETBINDSLOT(ConstantBuffer),threadID);
|
||||
|
||||
wiRenderer::GetDevice()->BindDepthStencilState(dss,STENCILREF_DEFAULT,threadID);
|
||||
device->BindDepthStencilState(dss,STENCILREF_DEFAULT,threadID);
|
||||
|
||||
|
||||
for(int i=0;i<3;++i){
|
||||
@@ -432,11 +435,11 @@ void wiHairParticle::Draw(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
renderPoints.reserve(MAX_PARTICLES);
|
||||
|
||||
if(texture){
|
||||
wiRenderer::GetDevice()->BindGS(i<2?qgs[0]:qgs[1],threadID);
|
||||
wiRenderer::GetDevice()->BindRasterizerState(i<2?ncrs:rs,threadID);
|
||||
device->BindGS(i<2?qgs[0]:qgs[1],threadID);
|
||||
device->BindRasterizerState(i<2?ncrs:rs,threadID);
|
||||
}
|
||||
else
|
||||
wiRenderer::GetDevice()->BindGS(gs[i],threadID);
|
||||
device->BindGS(gs[i],threadID);
|
||||
CulledList::iterator iter = culledPatches.begin();
|
||||
while(iter != culledPatches.end()){
|
||||
Cullable* culled = *iter;
|
||||
@@ -453,12 +456,14 @@ void wiHairParticle::Draw(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
++iter;
|
||||
}
|
||||
|
||||
wiRenderer::GetDevice()->UpdateBuffer(vb[i],renderPoints.data(),threadID,sizeof(Point)*renderPoints.size());
|
||||
wiRenderer::GetDevice()->BindVertexBuffer(vb[i],0,sizeof(Point),threadID);
|
||||
wiRenderer::GetDevice()->Draw(renderPoints.size(),threadID);
|
||||
device->UpdateBuffer(vb[i],renderPoints.data(),threadID,sizeof(Point)*renderPoints.size());
|
||||
device->BindVertexBuffer(vb[i],0,sizeof(Point),threadID);
|
||||
device->Draw(renderPoints.size(),threadID);
|
||||
}
|
||||
|
||||
wiRenderer::GetDevice()->BindGS(nullptr,threadID);
|
||||
device->BindGS(nullptr,threadID);
|
||||
|
||||
device->EventEnd();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+65
-63
@@ -210,38 +210,38 @@ void wiImage::BindPersistentState(GRAPHICSTHREAD threadID)
|
||||
wiRenderer::GetDevice()->UNLOCK();
|
||||
}
|
||||
|
||||
void wiImage::Draw(Texture2D* texture, const wiImageEffects& effects){
|
||||
Draw(texture,effects,GRAPHICSTHREAD_IMMEDIATE);
|
||||
}
|
||||
void wiImage::Draw(Texture2D* texture, const wiImageEffects& effects,GRAPHICSTHREAD threadID)
|
||||
{
|
||||
GraphicsDevice* device = wiRenderer::GetDevice();
|
||||
device->EventBegin(L"Image");
|
||||
|
||||
bool fullScreenEffect = false;
|
||||
|
||||
wiRenderer::GetDevice()->BindVertexLayout(nullptr, threadID);
|
||||
wiRenderer::GetDevice()->BindVertexBuffer(nullptr, 0, 0, threadID);
|
||||
wiRenderer::GetDevice()->BindIndexBuffer(nullptr, threadID);
|
||||
wiRenderer::GetDevice()->BindPrimitiveTopology(PRIMITIVETOPOLOGY::TRIANGLESTRIP, threadID);
|
||||
wiRenderer::GetDevice()->BindRasterizerState(rasterizerState, threadID);
|
||||
device->BindVertexLayout(nullptr, threadID);
|
||||
device->BindVertexBuffer(nullptr, 0, 0, threadID);
|
||||
device->BindIndexBuffer(nullptr, threadID);
|
||||
device->BindPrimitiveTopology(PRIMITIVETOPOLOGY::TRIANGLESTRIP, threadID);
|
||||
device->BindRasterizerState(rasterizerState, threadID);
|
||||
|
||||
wiRenderer::GetDevice()->BindResourcePS(texture, TEXSLOT_ONDEMAND0, threadID);
|
||||
device->BindResourcePS(texture, TEXSLOT_ONDEMAND0, threadID);
|
||||
|
||||
if (effects.blendFlag == BLENDMODE_ALPHA)
|
||||
wiRenderer::GetDevice()->BindBlendState(blendState, threadID);
|
||||
device->BindBlendState(blendState, threadID);
|
||||
else if (effects.blendFlag == BLENDMODE_ADDITIVE)
|
||||
wiRenderer::GetDevice()->BindBlendState(blendStateAdd, threadID);
|
||||
device->BindBlendState(blendStateAdd, threadID);
|
||||
else if (effects.blendFlag == BLENDMODE_OPAQUE)
|
||||
wiRenderer::GetDevice()->BindBlendState(blendStateNoBlend, threadID);
|
||||
device->BindBlendState(blendStateNoBlend, threadID);
|
||||
else if (effects.blendFlag == BLENDMODE_MAX)
|
||||
wiRenderer::GetDevice()->BindBlendState(blendStateAvg, threadID);
|
||||
device->BindBlendState(blendStateAvg, threadID);
|
||||
else
|
||||
wiRenderer::GetDevice()->BindBlendState(blendState, threadID);
|
||||
device->BindBlendState(blendState, threadID);
|
||||
|
||||
if (effects.presentFullScreen)
|
||||
{
|
||||
wiRenderer::GetDevice()->BindVS(screenVS, threadID);
|
||||
wiRenderer::GetDevice()->BindPS(screenPS, threadID);
|
||||
wiRenderer::GetDevice()->Draw(3, threadID);
|
||||
device->BindVS(screenVS, threadID);
|
||||
device->BindPS(screenPS, threadID);
|
||||
device->Draw(3, threadID);
|
||||
device->EventEnd();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -251,13 +251,13 @@ void wiImage::Draw(Texture2D* texture, const wiImageEffects& effects,GRAPHICSTHR
|
||||
switch (effects.stencilComp)
|
||||
{
|
||||
case COMPARISON_LESS:
|
||||
wiRenderer::GetDevice()->BindDepthStencilState(depthStencilStateLess, effects.stencilRef, threadID);
|
||||
device->BindDepthStencilState(depthStencilStateLess, effects.stencilRef, threadID);
|
||||
break;
|
||||
case COMPARISON_GREATER:
|
||||
wiRenderer::GetDevice()->BindDepthStencilState(depthStencilStateGreater, effects.stencilRef, threadID);
|
||||
device->BindDepthStencilState(depthStencilStateGreater, effects.stencilRef, threadID);
|
||||
break;
|
||||
default:
|
||||
wiRenderer::GetDevice()->BindDepthStencilState(depthNoStencilState, effects.stencilRef, threadID);
|
||||
device->BindDepthStencilState(depthNoStencilState, effects.stencilRef, threadID);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -265,10 +265,10 @@ void wiImage::Draw(Texture2D* texture, const wiImageEffects& effects,GRAPHICSTHR
|
||||
if(!effects.blur){
|
||||
if(!effects.process.active && !effects.bloom.separate && !effects.sunPos.x && !effects.sunPos.y){
|
||||
if(effects.typeFlag==SCREEN){
|
||||
cb.mViewProjection = XMMatrixTranspose(XMMatrixOrthographicLH((float)wiRenderer::GetDevice()->GetScreenWidth(), (float)wiRenderer::GetDevice()->GetScreenHeight(), 0, 100));
|
||||
cb.mTrans = XMMatrixTranspose(XMMatrixTranslation(wiRenderer::GetDevice()->GetScreenWidth() / 2 - effects.siz.x / 2, -wiRenderer::GetDevice()->GetScreenHeight() / 2 + effects.siz.y / 2, 0) * XMMatrixRotationZ(effects.rotation)
|
||||
* XMMatrixTranslation(-wiRenderer::GetDevice()->GetScreenWidth() / 2 + effects.pos.x + effects.siz.x*0.5f, wiRenderer::GetDevice()->GetScreenHeight() / 2 + effects.pos.y - effects.siz.y*0.5f, 0)); //AUTO ORIGIN CORRECTION APPLIED! NO FURTHER TRANSLATIONS NEEDED!
|
||||
cb.mDimensions = XMFLOAT4((float)wiRenderer::GetDevice()->GetScreenWidth(), (float)wiRenderer::GetDevice()->GetScreenHeight(), effects.siz.x, effects.siz.y);
|
||||
cb.mViewProjection = XMMatrixTranspose(XMMatrixOrthographicLH((float)device->GetScreenWidth(), (float)device->GetScreenHeight(), 0, 100));
|
||||
cb.mTrans = XMMatrixTranspose(XMMatrixTranslation(device->GetScreenWidth() / 2 - effects.siz.x / 2, -device->GetScreenHeight() / 2 + effects.siz.y / 2, 0) * XMMatrixRotationZ(effects.rotation)
|
||||
* XMMatrixTranslation(-device->GetScreenWidth() / 2 + effects.pos.x + effects.siz.x*0.5f, device->GetScreenHeight() / 2 + effects.pos.y - effects.siz.y*0.5f, 0)); //AUTO ORIGIN CORRECTION APPLIED! NO FURTHER TRANSLATIONS NEEDED!
|
||||
cb.mDimensions = XMFLOAT4((float)device->GetScreenWidth(), (float)device->GetScreenHeight(), effects.siz.x, effects.siz.y);
|
||||
}
|
||||
else if(effects.typeFlag==WORLD){
|
||||
cb.mViewProjection = XMMatrixTranspose( wiRenderer::getCamera()->GetView() * wiRenderer::getCamera()->GetProjection() );
|
||||
@@ -314,40 +314,40 @@ void wiImage::Draw(Texture2D* texture, const wiImageEffects& effects,GRAPHICSTHR
|
||||
cb.mNormalmapSeparate = normalmapmode;
|
||||
cb.mMipLevel = effects.mipLevel;
|
||||
|
||||
wiRenderer::GetDevice()->UpdateBuffer(constantBuffer,&cb,threadID);
|
||||
device->UpdateBuffer(constantBuffer,&cb,threadID);
|
||||
|
||||
wiRenderer::GetDevice()->BindVS(vertexShader, threadID);
|
||||
wiRenderer::GetDevice()->BindPS(pixelShader, threadID);
|
||||
device->BindVS(vertexShader, threadID);
|
||||
device->BindPS(pixelShader, threadID);
|
||||
fullScreenEffect = false;
|
||||
}
|
||||
else if(!effects.sunPos.x && !effects.sunPos.y){
|
||||
wiRenderer::GetDevice()->BindVS(screenVS, threadID);
|
||||
device->BindVS(screenVS, threadID);
|
||||
fullScreenEffect = true;
|
||||
|
||||
if(effects.process.outline)
|
||||
wiRenderer::GetDevice()->BindPS(outlinePS,threadID);
|
||||
device->BindPS(outlinePS,threadID);
|
||||
else if(effects.process.motionBlur)
|
||||
wiRenderer::GetDevice()->BindPS(motionBlurPS,threadID);
|
||||
device->BindPS(motionBlurPS,threadID);
|
||||
else if(effects.process.dofStrength)
|
||||
wiRenderer::GetDevice()->BindPS(dofPS,threadID);
|
||||
device->BindPS(dofPS,threadID);
|
||||
else if(effects.process.fxaa)
|
||||
wiRenderer::GetDevice()->BindPS(fxaaPS,threadID);
|
||||
device->BindPS(fxaaPS,threadID);
|
||||
else if(effects.process.ssao)
|
||||
wiRenderer::GetDevice()->BindPS(ssaoPS,threadID);
|
||||
device->BindPS(ssaoPS,threadID);
|
||||
else if(effects.process.linDepth)
|
||||
wiRenderer::GetDevice()->BindPS(linDepthPS, threadID);
|
||||
device->BindPS(linDepthPS, threadID);
|
||||
else if (effects.process.colorGrade)
|
||||
wiRenderer::GetDevice()->BindPS(colorGradePS, threadID);
|
||||
device->BindPS(colorGradePS, threadID);
|
||||
else if (effects.process.ssr)
|
||||
wiRenderer::GetDevice()->BindPS(ssrPS, threadID);
|
||||
device->BindPS(ssrPS, threadID);
|
||||
else if (effects.process.stereogram)
|
||||
wiRenderer::GetDevice()->BindPS(stereogramPS, threadID);
|
||||
device->BindPS(stereogramPS, threadID);
|
||||
else if (effects.process.tonemap)
|
||||
wiRenderer::GetDevice()->BindPS(tonemapPS, threadID);
|
||||
device->BindPS(tonemapPS, threadID);
|
||||
else if(effects.process.ssss.x + effects.process.ssss.y > 0)
|
||||
wiRenderer::GetDevice()->BindPS(ssssPS,threadID);
|
||||
device->BindPS(ssssPS,threadID);
|
||||
else if(effects.bloom.separate)
|
||||
wiRenderer::GetDevice()->BindPS(bloomSeparatePS,threadID);
|
||||
device->BindPS(bloomSeparatePS,threadID);
|
||||
else
|
||||
wiHelper::messageBox("Postprocess branch not implemented!");
|
||||
|
||||
@@ -360,11 +360,11 @@ void wiImage::Draw(Texture2D* texture, const wiImageEffects& effects,GRAPHICSTHR
|
||||
prcb.params1[2] = effects.bloom.saturation;
|
||||
prcb.params1[3] = effects.process.ssss.y;
|
||||
|
||||
wiRenderer::GetDevice()->UpdateBuffer(processCb, &prcb, threadID);
|
||||
device->UpdateBuffer(processCb, &prcb, threadID);
|
||||
}
|
||||
else{
|
||||
wiRenderer::GetDevice()->BindVS(screenVS,threadID);
|
||||
wiRenderer::GetDevice()->BindPS(shaftPS,threadID);
|
||||
device->BindVS(screenVS,threadID);
|
||||
device->BindPS(shaftPS,threadID);
|
||||
fullScreenEffect = true;
|
||||
|
||||
//Density|Weight|Decay|Exposure
|
||||
@@ -375,23 +375,23 @@ void wiImage::Draw(Texture2D* texture, const wiImageEffects& effects,GRAPHICSTHR
|
||||
prcb.params1[0] = effects.sunPos.x;
|
||||
prcb.params1[1] = effects.sunPos.y;
|
||||
|
||||
wiRenderer::GetDevice()->UpdateBuffer(processCb,&prcb,threadID);
|
||||
device->UpdateBuffer(processCb,&prcb,threadID);
|
||||
}
|
||||
wiRenderer::GetDevice()->BindResourcePS(effects.maskMap, TEXSLOT_ONDEMAND1, threadID);
|
||||
wiRenderer::GetDevice()->BindResourcePS(effects.distortionMap, TEXSLOT_ONDEMAND2, threadID);
|
||||
wiRenderer::GetDevice()->BindResourcePS(effects.refractionSource, TEXSLOT_ONDEMAND3, threadID);
|
||||
device->BindResourcePS(effects.maskMap, TEXSLOT_ONDEMAND1, threadID);
|
||||
device->BindResourcePS(effects.distortionMap, TEXSLOT_ONDEMAND2, threadID);
|
||||
device->BindResourcePS(effects.refractionSource, TEXSLOT_ONDEMAND3, threadID);
|
||||
}
|
||||
else{ //BLUR
|
||||
wiRenderer::GetDevice()->BindVS(screenVS,threadID);
|
||||
device->BindVS(screenVS,threadID);
|
||||
fullScreenEffect = true;
|
||||
|
||||
if(effects.blurDir==0){
|
||||
wiRenderer::GetDevice()->BindPS(blurHPS,threadID);
|
||||
prcb.params1[3] = 1.0f / wiRenderer::GetDevice()->GetScreenWidth();
|
||||
device->BindPS(blurHPS,threadID);
|
||||
prcb.params1[3] = 1.0f / device->GetScreenWidth();
|
||||
}
|
||||
else{
|
||||
wiRenderer::GetDevice()->BindPS(blurVPS,threadID);
|
||||
prcb.params1[3] = 1.0f / wiRenderer::GetDevice()->GetScreenHeight();
|
||||
device->BindPS(blurVPS,threadID);
|
||||
prcb.params1[3] = 1.0f / device->GetScreenHeight();
|
||||
}
|
||||
|
||||
static float weight0 = 1.0f;
|
||||
@@ -408,38 +408,40 @@ void wiImage::Draw(Texture2D* texture, const wiImageEffects& effects,GRAPHICSTHR
|
||||
prcb.params1[1] = effects.blur;
|
||||
prcb.params1[2] = effects.mipLevel;
|
||||
|
||||
wiRenderer::GetDevice()->UpdateBuffer(processCb, &prcb, threadID);
|
||||
device->UpdateBuffer(processCb, &prcb, threadID);
|
||||
|
||||
}
|
||||
|
||||
|
||||
if(effects.quality==QUALITY_NEAREST){
|
||||
if (effects.sampleFlag == SAMPLEMODE_MIRROR)
|
||||
wiRenderer::GetDevice()->BindSamplerPS(wiRenderer::samplers[SSLOT_POINT_MIRROR], SSLOT_ONDEMAND0, threadID);
|
||||
device->BindSamplerPS(wiRenderer::samplers[SSLOT_POINT_MIRROR], SSLOT_ONDEMAND0, threadID);
|
||||
else if (effects.sampleFlag == SAMPLEMODE_WRAP)
|
||||
wiRenderer::GetDevice()->BindSamplerPS(wiRenderer::samplers[SSLOT_POINT_WRAP], SSLOT_ONDEMAND0, threadID);
|
||||
device->BindSamplerPS(wiRenderer::samplers[SSLOT_POINT_WRAP], SSLOT_ONDEMAND0, threadID);
|
||||
else if (effects.sampleFlag == SAMPLEMODE_CLAMP)
|
||||
wiRenderer::GetDevice()->BindSamplerPS(wiRenderer::samplers[SSLOT_POINT_CLAMP], SSLOT_ONDEMAND0, threadID);
|
||||
device->BindSamplerPS(wiRenderer::samplers[SSLOT_POINT_CLAMP], SSLOT_ONDEMAND0, threadID);
|
||||
}
|
||||
else if(effects.quality==QUALITY_BILINEAR){
|
||||
if (effects.sampleFlag == SAMPLEMODE_MIRROR)
|
||||
wiRenderer::GetDevice()->BindSamplerPS(wiRenderer::samplers[SSLOT_LINEAR_MIRROR], SSLOT_ONDEMAND0, threadID);
|
||||
device->BindSamplerPS(wiRenderer::samplers[SSLOT_LINEAR_MIRROR], SSLOT_ONDEMAND0, threadID);
|
||||
else if (effects.sampleFlag == SAMPLEMODE_WRAP)
|
||||
wiRenderer::GetDevice()->BindSamplerPS(wiRenderer::samplers[SSLOT_LINEAR_WRAP], SSLOT_ONDEMAND0, threadID);
|
||||
device->BindSamplerPS(wiRenderer::samplers[SSLOT_LINEAR_WRAP], SSLOT_ONDEMAND0, threadID);
|
||||
else if (effects.sampleFlag == SAMPLEMODE_CLAMP)
|
||||
wiRenderer::GetDevice()->BindSamplerPS(wiRenderer::samplers[SSLOT_LINEAR_CLAMP], SSLOT_ONDEMAND0, threadID);
|
||||
device->BindSamplerPS(wiRenderer::samplers[SSLOT_LINEAR_CLAMP], SSLOT_ONDEMAND0, threadID);
|
||||
}
|
||||
else if(effects.quality==QUALITY_ANISOTROPIC){
|
||||
if (effects.sampleFlag == SAMPLEMODE_MIRROR)
|
||||
wiRenderer::GetDevice()->BindSamplerPS(wiRenderer::samplers[SSLOT_ANISO_MIRROR], SSLOT_ONDEMAND0, threadID);
|
||||
device->BindSamplerPS(wiRenderer::samplers[SSLOT_ANISO_MIRROR], SSLOT_ONDEMAND0, threadID);
|
||||
else if (effects.sampleFlag == SAMPLEMODE_WRAP)
|
||||
wiRenderer::GetDevice()->BindSamplerPS(wiRenderer::samplers[SSLOT_ANISO_WRAP], SSLOT_ONDEMAND0, threadID);
|
||||
device->BindSamplerPS(wiRenderer::samplers[SSLOT_ANISO_WRAP], SSLOT_ONDEMAND0, threadID);
|
||||
else if (effects.sampleFlag == SAMPLEMODE_CLAMP)
|
||||
wiRenderer::GetDevice()->BindSamplerPS(wiRenderer::samplers[SSLOT_ANISO_CLAMP], SSLOT_ONDEMAND0, threadID);
|
||||
device->BindSamplerPS(wiRenderer::samplers[SSLOT_ANISO_CLAMP], SSLOT_ONDEMAND0, threadID);
|
||||
}
|
||||
|
||||
|
||||
wiRenderer::GetDevice()->Draw((fullScreenEffect ? 3 : 4), threadID);
|
||||
device->Draw((fullScreenEffect ? 3 : 4), threadID);
|
||||
|
||||
device->EventEnd();
|
||||
}
|
||||
|
||||
void wiImage::DrawDeferred(Texture2D* lightmap, Texture2D* ao, GRAPHICSTHREAD threadID, int stencilRef){
|
||||
|
||||
@@ -66,8 +66,7 @@ private:
|
||||
public:
|
||||
wiImage();
|
||||
|
||||
static void Draw(wiGraphicsTypes::Texture2D* texture, const wiImageEffects& effects);
|
||||
static void Draw(wiGraphicsTypes::Texture2D* texture, const wiImageEffects& effects,GRAPHICSTHREAD threadID);
|
||||
static void Draw(wiGraphicsTypes::Texture2D* texture, const wiImageEffects& effects,GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE);
|
||||
|
||||
static void DrawDeferred(wiGraphicsTypes::Texture2D* lightmap, wiGraphicsTypes::Texture2D* ao, GRAPHICSTHREAD threadID, int stencilref = 0);
|
||||
|
||||
|
||||
@@ -31,42 +31,47 @@ void wiLensFlare::CleanUp(){
|
||||
}
|
||||
void wiLensFlare::Draw(GRAPHICSTHREAD threadID, const XMVECTOR& lightPos, vector<Texture2D*>& rims){
|
||||
|
||||
if(!rims.empty()){
|
||||
if(!rims.empty())
|
||||
{
|
||||
GraphicsDevice* device = wiRenderer::GetDevice();
|
||||
device->EventBegin(L"LensFlare");
|
||||
|
||||
wiRenderer::GetDevice()->BindPrimitiveTopology(POINTLIST,threadID);
|
||||
wiRenderer::GetDevice()->BindVertexLayout(inputLayout,threadID);
|
||||
wiRenderer::GetDevice()->BindPS(pixelShader,threadID);
|
||||
wiRenderer::GetDevice()->BindVS(vertexShader,threadID);
|
||||
wiRenderer::GetDevice()->BindGS(geometryShader,threadID);
|
||||
device->BindPrimitiveTopology(POINTLIST,threadID);
|
||||
device->BindVertexLayout(inputLayout,threadID);
|
||||
device->BindPS(pixelShader,threadID);
|
||||
device->BindVS(vertexShader,threadID);
|
||||
device->BindGS(geometryShader,threadID);
|
||||
|
||||
ConstantBuffer cb;
|
||||
cb.mSunPos = lightPos / XMVectorSet((float)wiRenderer::GetDevice()->GetScreenWidth(), (float)wiRenderer::GetDevice()->GetScreenHeight(), 1, 1);
|
||||
cb.mScreen = XMFLOAT4((float)wiRenderer::GetDevice()->GetScreenWidth(), (float)wiRenderer::GetDevice()->GetScreenHeight(), 0, 0);
|
||||
cb.mSunPos = lightPos / XMVectorSet((float)device->GetScreenWidth(), (float)device->GetScreenHeight(), 1, 1);
|
||||
cb.mScreen = XMFLOAT4((float)device->GetScreenWidth(), (float)device->GetScreenHeight(), 0, 0);
|
||||
|
||||
wiRenderer::GetDevice()->UpdateBuffer(constantBuffer,&cb,threadID);
|
||||
wiRenderer::GetDevice()->BindConstantBufferGS(constantBuffer, CB_GETBINDSLOT(ConstantBuffer),threadID);
|
||||
device->UpdateBuffer(constantBuffer,&cb,threadID);
|
||||
device->BindConstantBufferGS(constantBuffer, CB_GETBINDSLOT(ConstantBuffer),threadID);
|
||||
|
||||
|
||||
wiRenderer::GetDevice()->BindRasterizerState(rasterizerState,threadID);
|
||||
wiRenderer::GetDevice()->BindDepthStencilState(depthStencilState,1,threadID);
|
||||
wiRenderer::GetDevice()->BindBlendState(blendState,threadID);
|
||||
device->BindRasterizerState(rasterizerState,threadID);
|
||||
device->BindDepthStencilState(depthStencilState,1,threadID);
|
||||
device->BindBlendState(blendState,threadID);
|
||||
|
||||
//wiRenderer::GetDevice()->BindResourceGS(depthMap,0,threadID);
|
||||
//device->BindResourceGS(depthMap,0,threadID);
|
||||
|
||||
int i=0;
|
||||
for(Texture2D* x : rims){
|
||||
if(x!=nullptr){
|
||||
wiRenderer::GetDevice()->BindResourcePS(x, TEXSLOT_ONDEMAND0 + i, threadID);
|
||||
wiRenderer::GetDevice()->BindResourceGS(x, TEXSLOT_ONDEMAND0 + i, threadID);
|
||||
device->BindResourcePS(x, TEXSLOT_ONDEMAND0 + i, threadID);
|
||||
device->BindResourceGS(x, TEXSLOT_ONDEMAND0 + i, threadID);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
wiRenderer::GetDevice()->Draw(i,threadID);
|
||||
device->Draw(i,threadID);
|
||||
|
||||
|
||||
|
||||
|
||||
wiRenderer::GetDevice()->BindGS(nullptr,threadID);
|
||||
device->BindGS(nullptr,threadID);
|
||||
|
||||
device->EventEnd();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+146
-113
@@ -1334,6 +1334,8 @@ void wiRenderer::UpdateRenderData(GRAPHICSTHREAD threadID)
|
||||
&& mesh->sOutBuffer.IsValid() && mesh->meshVertBuff.IsValid())
|
||||
{
|
||||
#ifdef USE_GPU_SKINNING
|
||||
GetDevice()->EventBegin(L"Skinning");
|
||||
|
||||
if (!streamOutSetUp)
|
||||
{
|
||||
streamOutSetUp = true;
|
||||
@@ -1368,6 +1370,8 @@ void wiRenderer::UpdateRenderData(GRAPHICSTHREAD threadID)
|
||||
GetDevice()->BindVertexBuffer(&mesh->meshVertBuff, 0, sizeof(SkinnedVertex), threadID);
|
||||
GetDevice()->BindStreamOutTarget(&mesh->sOutBuffer, threadID);
|
||||
GetDevice()->Draw(mesh->vertices.size(), threadID);
|
||||
|
||||
GetDevice()->EventEnd();
|
||||
#else
|
||||
// Doing skinning on the CPU
|
||||
for (int vi = 0; vi < mesh->skinnedVertices.size(); ++vi)
|
||||
@@ -1498,6 +1502,8 @@ void wiRenderer::DrawDebugSpheres(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
void wiRenderer::DrawDebugBoneLines(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
{
|
||||
if(debugBoneLines){
|
||||
GetDevice()->EventBegin(L"DebugBoneLines");
|
||||
|
||||
GetDevice()->BindPrimitiveTopology(LINELIST,threadID);
|
||||
GetDevice()->BindVertexLayout(vertexLayouts[VLTYPE_LINE],threadID);
|
||||
|
||||
@@ -1519,6 +1525,8 @@ void wiRenderer::DrawDebugBoneLines(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
GetDevice()->BindVertexBuffer(&boneLines[i]->vertexBuffer, 0, sizeof(XMFLOAT3A), threadID);
|
||||
GetDevice()->Draw(2, threadID);
|
||||
}
|
||||
|
||||
GetDevice()->EventEnd();
|
||||
}
|
||||
}
|
||||
void wiRenderer::DrawDebugLines(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
@@ -1526,6 +1534,8 @@ void wiRenderer::DrawDebugLines(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
if (linesTemp.empty())
|
||||
return;
|
||||
|
||||
GetDevice()->EventBegin(L"DebugLines");
|
||||
|
||||
GetDevice()->BindPrimitiveTopology(LINELIST, threadID);
|
||||
GetDevice()->BindVertexLayout(vertexLayouts[VLTYPE_LINE], threadID);
|
||||
|
||||
@@ -1551,10 +1561,14 @@ void wiRenderer::DrawDebugLines(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
for (Lines* x : linesTemp)
|
||||
delete x;
|
||||
linesTemp.clear();
|
||||
|
||||
GetDevice()->EventEnd();
|
||||
}
|
||||
void wiRenderer::DrawDebugBoxes(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
{
|
||||
if(debugBoxes){
|
||||
GetDevice()->EventBegin(L"DebugBoxes");
|
||||
|
||||
GetDevice()->BindPrimitiveTopology(LINELIST,threadID);
|
||||
GetDevice()->BindVertexLayout(vertexLayouts[VLTYPE_LINE],threadID);
|
||||
|
||||
@@ -1579,6 +1593,7 @@ void wiRenderer::DrawDebugBoxes(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
GetDevice()->DrawIndexed(24,threadID);
|
||||
}
|
||||
|
||||
GetDevice()->EventEnd();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1607,7 +1622,15 @@ void wiRenderer::DrawSoftPremulParticles(Camera* camera, GRAPHICSTHREAD threadID
|
||||
e->DrawPremul(camera, threadID, dark);
|
||||
}
|
||||
}
|
||||
void wiRenderer::DrawTrails(GRAPHICSTHREAD threadID, Texture2D* refracRes){
|
||||
void wiRenderer::DrawTrails(GRAPHICSTHREAD threadID, Texture2D* refracRes)
|
||||
{
|
||||
if (objectsWithTrails.empty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
GetDevice()->EventBegin(L"RibbonTrails");
|
||||
|
||||
GetDevice()->BindPrimitiveTopology(TRIANGLESTRIP,threadID);
|
||||
GetDevice()->BindVertexLayout(vertexLayouts[VLTYPE_TRAIL],threadID);
|
||||
|
||||
@@ -1676,6 +1699,8 @@ void wiRenderer::DrawTrails(GRAPHICSTHREAD threadID, Texture2D* refracRes){
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GetDevice()->EventEnd();
|
||||
}
|
||||
void wiRenderer::DrawImagesAdd(GRAPHICSTHREAD threadID, Texture2D* refracRes){
|
||||
imagesRTAdd.Activate(threadID,0,0,0,1);
|
||||
@@ -1733,133 +1758,129 @@ void wiRenderer::DrawLights(Camera* camera, GRAPHICSTHREAD threadID, unsigned in
|
||||
|
||||
if(!culledObjects.empty())
|
||||
{
|
||||
|
||||
GetDevice()->EventBegin(L"Light Render");
|
||||
|
||||
GetDevice()->BindPrimitiveTopology(TRIANGLELIST,threadID);
|
||||
|
||||
//BindResourcePS(depth,0,threadID);
|
||||
//BindResourcePS(normal,1,threadID);
|
||||
//BindResourcePS(material,2,threadID);
|
||||
|
||||
|
||||
GetDevice()->BindBlendState(blendStates[BSTYPE_ADDITIVE],threadID);
|
||||
GetDevice()->BindDepthStencilState(depthStencils[DSSTYPE_STENCILREAD],stencilRef,threadID);
|
||||
GetDevice()->BindRasterizerState(rasterizers[RSTYPE_BACK],threadID);
|
||||
GetDevice()->BindBlendState(blendStates[BSTYPE_ADDITIVE],threadID);
|
||||
GetDevice()->BindDepthStencilState(depthStencils[DSSTYPE_STENCILREAD],stencilRef,threadID);
|
||||
GetDevice()->BindRasterizerState(rasterizers[RSTYPE_BACK],threadID);
|
||||
|
||||
GetDevice()->BindVertexLayout(nullptr, threadID);
|
||||
GetDevice()->BindVertexBuffer(nullptr, 0, 0, threadID);
|
||||
GetDevice()->BindIndexBuffer(nullptr, threadID);
|
||||
GetDevice()->BindVertexLayout(nullptr, threadID);
|
||||
GetDevice()->BindVertexBuffer(nullptr, 0, 0, threadID);
|
||||
GetDevice()->BindIndexBuffer(nullptr, threadID);
|
||||
|
||||
GetDevice()->BindConstantBufferPS(constantBuffers[CBTYPE_POINTLIGHT], CB_GETBINDSLOT(PointLightCB), threadID);
|
||||
GetDevice()->BindConstantBufferVS(constantBuffers[CBTYPE_POINTLIGHT], CB_GETBINDSLOT(PointLightCB), threadID);
|
||||
GetDevice()->BindConstantBufferPS(constantBuffers[CBTYPE_POINTLIGHT], CB_GETBINDSLOT(PointLightCB), threadID);
|
||||
GetDevice()->BindConstantBufferVS(constantBuffers[CBTYPE_POINTLIGHT], CB_GETBINDSLOT(PointLightCB), threadID);
|
||||
|
||||
GetDevice()->BindConstantBufferPS(constantBuffers[CBTYPE_SPOTLIGHT], CB_GETBINDSLOT(SpotLightCB), threadID);
|
||||
GetDevice()->BindConstantBufferVS(constantBuffers[CBTYPE_SPOTLIGHT], CB_GETBINDSLOT(SpotLightCB), threadID);
|
||||
GetDevice()->BindConstantBufferPS(constantBuffers[CBTYPE_SPOTLIGHT], CB_GETBINDSLOT(SpotLightCB), threadID);
|
||||
GetDevice()->BindConstantBufferVS(constantBuffers[CBTYPE_SPOTLIGHT], CB_GETBINDSLOT(SpotLightCB), threadID);
|
||||
|
||||
for(int type=0;type<3;++type){
|
||||
for(int type=0;type<3;++type){
|
||||
|
||||
|
||||
GetDevice()->BindVS(vertexShaders[VSTYPE_DIRLIGHT + type],threadID);
|
||||
GetDevice()->BindVS(vertexShaders[VSTYPE_DIRLIGHT + type],threadID);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case 0:
|
||||
if (SOFTSHADOW)
|
||||
switch (type)
|
||||
{
|
||||
GetDevice()->BindPS(pixelShaders[PSTYPE_DIRLIGHT_SOFT], threadID);
|
||||
}
|
||||
else
|
||||
{
|
||||
GetDevice()->BindPS(pixelShaders[PSTYPE_DIRLIGHT], threadID);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
GetDevice()->BindPS(pixelShaders[PSTYPE_POINTLIGHT], threadID);
|
||||
break;
|
||||
case 2:
|
||||
GetDevice()->BindPS(pixelShaders[PSTYPE_SPOTLIGHT], threadID);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
for(Cullable* c : culledObjects){
|
||||
Light* l = (Light*)c;
|
||||
if (l->type != type)
|
||||
continue;
|
||||
|
||||
if(type==0) //dir
|
||||
{
|
||||
DirectionalLightCB lcb;
|
||||
lcb.direction=XMVector3Normalize(
|
||||
-XMVector3Transform( XMVectorSet(0,-1,0,1), XMMatrixRotationQuaternion( XMLoadFloat4(&l->rotation) ) )
|
||||
);
|
||||
lcb.col=XMFLOAT4(l->color.x*l->enerDis.x,l->color.y*l->enerDis.x,l->color.z*l->enerDis.x,1);
|
||||
lcb.mBiasResSoftshadow=XMFLOAT4(l->shadowBias,(float)SHADOWMAPRES,(float)SOFTSHADOW,0);
|
||||
for (unsigned int shmap = 0; shmap < l->shadowMaps_dirLight.size(); ++shmap){
|
||||
lcb.mShM[shmap]=l->shadowCam[shmap].getVP();
|
||||
if(l->shadowMaps_dirLight[shmap].depth)
|
||||
GetDevice()->BindResourcePS(l->shadowMaps_dirLight[shmap].depth->GetTexture(),TEXSLOT_SHADOW0+shmap,threadID);
|
||||
}
|
||||
GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_DIRLIGHT],&lcb,threadID);
|
||||
|
||||
GetDevice()->Draw(3, threadID);
|
||||
}
|
||||
else if(type==1) //point
|
||||
{
|
||||
PointLightCB lcb;
|
||||
lcb.pos=l->translation;
|
||||
lcb.col=l->color;
|
||||
lcb.enerdis=l->enerDis;
|
||||
lcb.enerdis.w = 0.f;
|
||||
|
||||
if (l->shadow && l->shadowMap_index>=0)
|
||||
case 0:
|
||||
if (SOFTSHADOW)
|
||||
{
|
||||
lcb.enerdis.w = 1.f;
|
||||
if(Light::shadowMaps_pointLight[l->shadowMap_index].depth)
|
||||
GetDevice()->BindResourcePS(Light::shadowMaps_pointLight[l->shadowMap_index].depth->GetTexture(), TEXSLOT_SHADOW_CUBE, threadID);
|
||||
GetDevice()->BindPS(pixelShaders[PSTYPE_DIRLIGHT_SOFT], threadID);
|
||||
}
|
||||
GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_POINTLIGHT], &lcb, threadID);
|
||||
|
||||
GetDevice()->Draw(240, threadID);
|
||||
else
|
||||
{
|
||||
GetDevice()->BindPS(pixelShaders[PSTYPE_DIRLIGHT], threadID);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
GetDevice()->BindPS(pixelShaders[PSTYPE_POINTLIGHT], threadID);
|
||||
break;
|
||||
case 2:
|
||||
GetDevice()->BindPS(pixelShaders[PSTYPE_SPOTLIGHT], threadID);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
else if(type==2) //spot
|
||||
{
|
||||
SpotLightCB lcb;
|
||||
const float coneS=(const float)(l->enerDis.z/0.7853981852531433);
|
||||
XMMATRIX world,rot;
|
||||
world = XMMatrixTranspose(
|
||||
XMMatrixScaling(coneS*l->enerDis.y,l->enerDis.y,coneS*l->enerDis.y)*
|
||||
XMMatrixRotationQuaternion( XMLoadFloat4( &l->rotation ) )*
|
||||
XMMatrixTranslationFromVector( XMLoadFloat3(&l->translation) )
|
||||
|
||||
|
||||
for(Cullable* c : culledObjects){
|
||||
Light* l = (Light*)c;
|
||||
if (l->type != type)
|
||||
continue;
|
||||
|
||||
if(type==0) //dir
|
||||
{
|
||||
DirectionalLightCB lcb;
|
||||
lcb.direction=XMVector3Normalize(
|
||||
-XMVector3Transform( XMVectorSet(0,-1,0,1), XMMatrixRotationQuaternion( XMLoadFloat4(&l->rotation) ) )
|
||||
);
|
||||
rot=XMMatrixRotationQuaternion( XMLoadFloat4(&l->rotation) );
|
||||
lcb.direction=XMVector3Normalize(
|
||||
-XMVector3Transform( XMVectorSet(0,-1,0,1), rot )
|
||||
);
|
||||
lcb.world=world;
|
||||
lcb.mBiasResSoftshadow=XMFLOAT4(l->shadowBias,(float)SPOTLIGHTSHADOWRES,(float)SOFTSHADOW,0);
|
||||
lcb.mShM = XMMatrixIdentity();
|
||||
lcb.col=l->color;
|
||||
lcb.enerdis=l->enerDis;
|
||||
lcb.enerdis.z=(float)cos(l->enerDis.z/2.0);
|
||||
lcb.col=XMFLOAT4(l->color.x*l->enerDis.x,l->color.y*l->enerDis.x,l->color.z*l->enerDis.x,1);
|
||||
lcb.mBiasResSoftshadow=XMFLOAT4(l->shadowBias,(float)SHADOWMAPRES,(float)SOFTSHADOW,0);
|
||||
for (unsigned int shmap = 0; shmap < l->shadowMaps_dirLight.size(); ++shmap){
|
||||
lcb.mShM[shmap]=l->shadowCam[shmap].getVP();
|
||||
if(l->shadowMaps_dirLight[shmap].depth)
|
||||
GetDevice()->BindResourcePS(l->shadowMaps_dirLight[shmap].depth->GetTexture(),TEXSLOT_SHADOW0+shmap,threadID);
|
||||
}
|
||||
GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_DIRLIGHT],&lcb,threadID);
|
||||
|
||||
if (l->shadow && l->shadowMap_index>=0)
|
||||
{
|
||||
lcb.mShM = l->shadowCam[0].getVP();
|
||||
if(Light::shadowMaps_spotLight[l->shadowMap_index].depth)
|
||||
GetDevice()->BindResourcePS(Light::shadowMaps_spotLight[l->shadowMap_index].depth->GetTexture(), TEXSLOT_SHADOW0, threadID);
|
||||
GetDevice()->Draw(3, threadID);
|
||||
}
|
||||
GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_SPOTLIGHT], &lcb, threadID);
|
||||
else if(type==1) //point
|
||||
{
|
||||
PointLightCB lcb;
|
||||
lcb.pos=l->translation;
|
||||
lcb.col=l->color;
|
||||
lcb.enerdis=l->enerDis;
|
||||
lcb.enerdis.w = 0.f;
|
||||
|
||||
GetDevice()->Draw(192, threadID);
|
||||
if (l->shadow && l->shadowMap_index>=0)
|
||||
{
|
||||
lcb.enerdis.w = 1.f;
|
||||
if(Light::shadowMaps_pointLight[l->shadowMap_index].depth)
|
||||
GetDevice()->BindResourcePS(Light::shadowMaps_pointLight[l->shadowMap_index].depth->GetTexture(), TEXSLOT_SHADOW_CUBE, threadID);
|
||||
}
|
||||
GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_POINTLIGHT], &lcb, threadID);
|
||||
|
||||
GetDevice()->Draw(240, threadID);
|
||||
}
|
||||
else if(type==2) //spot
|
||||
{
|
||||
SpotLightCB lcb;
|
||||
const float coneS=(const float)(l->enerDis.z/0.7853981852531433);
|
||||
XMMATRIX world,rot;
|
||||
world = XMMatrixTranspose(
|
||||
XMMatrixScaling(coneS*l->enerDis.y,l->enerDis.y,coneS*l->enerDis.y)*
|
||||
XMMatrixRotationQuaternion( XMLoadFloat4( &l->rotation ) )*
|
||||
XMMatrixTranslationFromVector( XMLoadFloat3(&l->translation) )
|
||||
);
|
||||
rot=XMMatrixRotationQuaternion( XMLoadFloat4(&l->rotation) );
|
||||
lcb.direction=XMVector3Normalize(
|
||||
-XMVector3Transform( XMVectorSet(0,-1,0,1), rot )
|
||||
);
|
||||
lcb.world=world;
|
||||
lcb.mBiasResSoftshadow=XMFLOAT4(l->shadowBias,(float)SPOTLIGHTSHADOWRES,(float)SOFTSHADOW,0);
|
||||
lcb.mShM = XMMatrixIdentity();
|
||||
lcb.col=l->color;
|
||||
lcb.enerdis=l->enerDis;
|
||||
lcb.enerdis.z=(float)cos(l->enerDis.z/2.0);
|
||||
|
||||
if (l->shadow && l->shadowMap_index>=0)
|
||||
{
|
||||
lcb.mShM = l->shadowCam[0].getVP();
|
||||
if(Light::shadowMaps_spotLight[l->shadowMap_index].depth)
|
||||
GetDevice()->BindResourcePS(Light::shadowMaps_spotLight[l->shadowMap_index].depth->GetTexture(), TEXSLOT_SHADOW0, threadID);
|
||||
}
|
||||
GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_SPOTLIGHT], &lcb, threadID);
|
||||
|
||||
GetDevice()->Draw(192, threadID);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
GetDevice()->EventEnd();
|
||||
}
|
||||
}
|
||||
void wiRenderer::DrawVolumeLights(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
@@ -1868,12 +1889,13 @@ void wiRenderer::DrawVolumeLights(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
frustum.ConstructFrustum(min(camera->zFarP, GetScene().worldInfo.fogSEH.y), camera->Projection, camera->View);
|
||||
|
||||
|
||||
CulledList culledObjects;
|
||||
if(spTree_lights)
|
||||
wiSPTree::getVisible(spTree_lights->root,frustum,culledObjects);
|
||||
CulledList culledObjects;
|
||||
if(spTree_lights)
|
||||
wiSPTree::getVisible(spTree_lights->root,frustum,culledObjects);
|
||||
|
||||
if(!culledObjects.empty())
|
||||
{
|
||||
if(!culledObjects.empty())
|
||||
{
|
||||
GetDevice()->EventBegin(L"Light Volume Render");
|
||||
|
||||
GetDevice()->BindPrimitiveTopology(TRIANGLELIST,threadID);
|
||||
GetDevice()->BindVertexLayout(nullptr);
|
||||
@@ -1948,6 +1970,7 @@ void wiRenderer::DrawVolumeLights(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
|
||||
}
|
||||
|
||||
GetDevice()->EventEnd();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2003,6 +2026,7 @@ void wiRenderer::ClearShadowMaps(GRAPHICSTHREAD threadID){
|
||||
void wiRenderer::DrawForShadowMap(GRAPHICSTHREAD threadID)
|
||||
{
|
||||
if (GameSpeed) {
|
||||
GetDevice()->EventBegin(L"ShadowMap Render");
|
||||
|
||||
CulledList culledLights;
|
||||
if (spTree_lights)
|
||||
@@ -2354,6 +2378,8 @@ void wiRenderer::DrawForShadowMap(GRAPHICSTHREAD threadID)
|
||||
GetDevice()->BindGS(nullptr, threadID);
|
||||
}
|
||||
}
|
||||
|
||||
GetDevice()->EventEnd();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2454,7 +2480,7 @@ void wiRenderer::DrawWorld(Camera* camera, bool DX11Eff, int tessF, GRAPHICSTHRE
|
||||
}
|
||||
}
|
||||
|
||||
wiRenderer::GetDevice()->EventBegin(L"Draw Models");
|
||||
GetDevice()->EventBegin(L"DrawWorld");
|
||||
|
||||
if(DX11Eff && tessF)
|
||||
GetDevice()->BindPrimitiveTopology(PATCHLIST,threadID);
|
||||
@@ -2617,6 +2643,7 @@ void wiRenderer::DrawWorldTransparent(Camera* camera, Texture2D* refracRes, Text
|
||||
// }
|
||||
//}
|
||||
|
||||
GetDevice()->EventBegin(L"DrawWorld Transparent");
|
||||
|
||||
for(Cullable* object : culledObjects)
|
||||
culledRenderer[((Object*)object)->mesh].insert((Object*)object);
|
||||
@@ -2733,6 +2760,8 @@ void wiRenderer::DrawWorldTransparent(Camera* camera, Texture2D* refracRes, Text
|
||||
m++;
|
||||
}
|
||||
}
|
||||
|
||||
GetDevice()->EventEnd();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2788,6 +2817,8 @@ void wiRenderer::DrawDecals(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
if (model->decals.empty())
|
||||
continue;
|
||||
|
||||
GetDevice()->EventBegin(L"Decals");
|
||||
|
||||
if (!boundCB)
|
||||
{
|
||||
boundCB = true;
|
||||
@@ -2834,6 +2865,8 @@ void wiRenderer::DrawDecals(Camera* camera, GRAPHICSTHREAD threadID)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
GetDevice()->EventEnd();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace wiVersion
|
||||
// minor features, major bug fixes
|
||||
const int minor = 7;
|
||||
// minor bug fixes, alterations, refactors
|
||||
const int revision = 8;
|
||||
const int revision = 9;
|
||||
|
||||
|
||||
long GetVersion()
|
||||
|
||||
Reference in New Issue
Block a user