增加部分资源

This commit is contained in:
hyzboy 2019-07-08 17:50:19 +08:00
parent 9f8171f8c0
commit 2e42bc0d0f
10 changed files with 89 additions and 4 deletions

View File

@ -14,6 +14,10 @@
using namespace hgl; using namespace hgl;
using namespace hgl::graph; using namespace hgl::graph;
VK_NAMESPACE_BEGIN
Texture2D *LoadTGATexture(const OSString &filename,Device *device);
VK_NAMESPACE_END
constexpr uint32_t GBUFFER_WIDTH=1024; constexpr uint32_t GBUFFER_WIDTH=1024;
constexpr uint32_t GBUFFER_HEIGHT=1024; constexpr uint32_t GBUFFER_HEIGHT=1024;
@ -76,7 +80,14 @@ private:
SubpassParam sp_gbuffer; SubpassParam sp_gbuffer;
SubpassParam sp_composition; SubpassParam sp_composition;
vulkan::Renderable *ro_sphere; vulkan::Renderable * ro_cube;
vulkan::Sampler * sampler;
struct
{
vulkan::Texture2D *color,*normal,*specular;
}texture;
private: private:
@ -224,12 +235,18 @@ private:
if(!InitGBufferPipeline(&sp_gbuffer))return(false); if(!InitGBufferPipeline(&sp_gbuffer))return(false);
if(!InitCompositionPipeline(&sp_composition))return(false); if(!InitCompositionPipeline(&sp_composition))return(false);
texture.color =vulkan::LoadTGATexture(OS_TEXT("cardboardPlainStain.tga"),device);
texture.normal =vulkan::LoadTGATexture(OS_TEXT("APOCWALL029_NRM.tga"),device);
texture.specular=vulkan::LoadTGATexture(OS_TEXT("APOCWALL029_SPEC.tga"),device);
return(true); return(true);
} }
void CreateRenderObject(vulkan::Material *mtl) void CreateRenderObject(vulkan::Material *mtl)
{ {
ro_sphere=CreateRenderableSphere(db,mtl,128); struct CubeCreateInfo cci;
ro_cube=CreateRenderableCube(db,mtl,&cci);
} }
bool InitUBO(SubpassParam *sp) bool InitUBO(SubpassParam *sp)
@ -248,7 +265,7 @@ private:
CreateRenderObject(sp->material); CreateRenderObject(sp->material);
render_root.Add(db->CreateRenderableInstance(sp->pipeline,sp->desc_sets,ro_sphere),scale(1000)); render_root.Add(db->CreateRenderableInstance(sp->pipeline,sp->desc_sets,ro_cube),scale(1000));
render_root.RefreshMatrix(); render_root.RefreshMatrix();
render_root.ExpendToList(&render_list); render_root.ExpendToList(&render_list);

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

BIN
res/image/brdflut.tga Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 KiB

View File

@ -121,7 +121,7 @@ vec3 atmosphere(vec3 r, vec3 r0, vec3 pSun, float iSun, float rPlanet, float rAt
void main() void main()
{ {
vec3 nrd=vec3(.x,-FragmentVertex.y,FragmentVertex.z); //vulkan coord to opengl(shader from opengl sample) vec3 nrd=vec3(FragmentVertex.x,-FragmentVertex.y,FragmentVertex.z); //vulkan coord to opengl(shader from opengl sample)
vec3 color=atmosphere( vec3 color=atmosphere(
nrd, // normalized ray direction nrd, // normalized ray direction

View File

@ -0,0 +1,27 @@
#version 450
layout (binding = 1) uniform sampler2D TextureColor;
layout (binding = 2) uniform sampler2D TextureNormal;
layout(location = 0) in vec3 FragmentNormal;
layout(location = 1) in vec3 FragmentTangent;
layout(location = 2) in vec3 FragmentPosition;
layout(location = 3) in vec2 FragmentTexCoord;
layout (location = 0) out vec4 outPosition;
layout (location = 1) out vec4 outNormal;
layout (location = 2) out vec4 outColor;
void main()
{
outPosition=vec4(FragmentPosition,1.0);
vec3 N = normalize(FragmentNormal);
vec3 T = normalize(FragmentTangent);
vec3 B = cross(N,T);
mat3 TBN = mat3(T,B,N);
vec3 tnorm = TBN * normalize(texture(TextureNormal,FragmentTexCoord).xyz*2.0-vec3(1.0));
outNormal=vec4(tnorm,1.0);
outColor=texture(TextureColor,FragmentTexCoord);
}

View File

@ -0,0 +1,38 @@
#version 450 core
layout(location = 0) in vec3 Vertex;
layout(location = 1) in vec2 TexCoord;
layout(location = 2) in vec3 Normal;
layout(location = 3) in vec3 Tangent;
layout(binding = 0) uniform WorldMatrix
{
mat4 two_dim;
mat4 projection;
mat4 modelview;
mat4 mvp;
} world;
layout(push_constant) uniform Consts {
mat4 local_to_world;
} pc;
layout(location = 0) out vec3 FragmentNormal;
layout(location = 1) out vec3 FragmentTangent;
layout(location = 2) out vec3 FragmentPosition;
layout(location = 3) out vec2 FragmentTexCoord;
void main()
{
vec4 pos=vec4(Vertex,1.0)*pc.local_to_world;
gl_Position=pos*world.mvp;
FragmentPosition=pos.xyz;
FragmentTexCoord=TexCoord;
mat3 n=transpose(inverse(mat3(pc.local_to_world)));
FragmentNormal=n*normalize(Normal);
FragmentTangent=n*normalize(Tangent);
}

View File

@ -14,3 +14,6 @@ glslangValidator -V -o c_gbuffer.frag.spv c_gbuffer.frag
glslangValidator -V -o Atomsphere.vert.spv Atomsphere.vert glslangValidator -V -o Atomsphere.vert.spv Atomsphere.vert
glslangValidator -V -o Atomsphere.frag.spv Atomsphere.frag glslangValidator -V -o Atomsphere.frag.spv Atomsphere.frag
glslangValidator -V -o gbuffer_opaque.vert.spv gbuffer_opaque.vert
glslangValidator -V -o gbuffer_opaque.frag.spv gbuffer_opaque.frag