浏览代码

Merge branch 'master' into scenegraph

undefined
Sam Hocevar 10 年前
父节点
当前提交
79ed58f1f0
共有 34 个文件被更改,包括 308 次插入197 次删除
  1. +1
    -0
      .gitignore
  2. +6
    -4
      build/vs2012/Lol.sln
  3. +2
    -2
      configure.ac
  4. +14
    -18
      demos/tutorial/05_easymesh.cpp
  5. +4
    -2
      src/core.h
  6. +45
    -46
      src/easymesh/easymesh.cpp
  7. +7
    -9
      src/easymesh/easymesh.h
  8. +4
    -2
      src/easymesh/easymeshrender.cpp
  9. +4
    -4
      src/easymesh/shiny.lolfx
  10. +4
    -4
      src/easymesh/shiny_SK.lolfx
  11. +4
    -4
      src/easymesh/shinydebugUV.lolfx
  12. +4
    -4
      src/easymesh/shinydebuglighting.lolfx
  13. +4
    -4
      src/easymesh/shinydebugnormal.lolfx
  14. +4
    -4
      src/easymesh/shinydebugwireframe.lolfx
  15. +4
    -4
      src/easymesh/shinyflat.lolfx
  16. +5
    -0
      src/gpu/indexbuffer.cpp
  17. +40
    -26
      src/gpu/shader.cpp
  18. +1
    -1
      src/gpu/vertexbuffer.cpp
  19. +1
    -1
      src/image/codec/zed-image.cpp
  20. +2
    -0
      src/lol/gpu/indexbuffer.h
  21. +18
    -0
      src/lol/gpu/renderer.h
  22. +3
    -3
      src/lol/gpu/shader.h
  23. +1
    -0
      src/lol/sys/thread.h
  24. +48
    -16
      src/mesh/mesh.cpp
  25. +15
    -5
      src/mesh/mesh.h
  26. +2
    -3
      src/mesh/primitive.cpp
  27. +2
    -4
      src/mesh/primitive.h
  28. +36
    -6
      src/scene.cpp
  29. +3
    -1
      src/scene.h
  30. +2
    -0
      src/sys/thread.cpp
  31. +6
    -6
      test/meshviewer.cpp
  32. +4
    -6
      test/physicobject.h
  33. +4
    -4
      test/shinyfur.lolfx
  34. +4
    -4
      test/shinymvtexture.lolfx

+ 1
- 0
.gitignore 查看文件

@@ -82,6 +82,7 @@ _ReSharper.*
test/benchsuite
test/btphystest
test/meshviewer
test/nacl_phystest
test/testsuite
test/sandbox/sample
test/math/pi


+ 6
- 4
build/vs2012/Lol.sln 查看文件

@@ -122,7 +122,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "People", "People", "{5F1AAF
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Peeweek", "Peeweek", "{E27FDF36-50C4-4ED2-8CF5-A20FED016910}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo-peeweek", "..\..\people\peeweek\private\demo-peeweek.vcxproj", "{C2E01551-B636-4324-8461-71811DF6FBB5}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo-peeweek", "..\..\people\peeweek\demo-peeweek.vcxproj", "{C2E01551-B636-4324-8461-71811DF6FBB5}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "03_noise", "..\..\demos\tutorial\03_noise.vcxproj", "{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}"
EndProject
@@ -152,11 +152,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "07_input", "..\..\demos\tut
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "06_sprite", "..\..\demos\tutorial\06_sprite.vcxproj", "{E05E23A5-67DE-42B5-98A3-E63CCE0CC0AF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "voxel", "..\..\people\benlitz\private\voxel\voxel.vcxproj", "{52493826-AC00-470B-A745-4F602529B3B0}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "voxel", "..\..\people\benlitz\voxel\voxel.vcxproj", "{52493826-AC00-470B-A745-4F602529B3B0}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Puzzle", "..\..\people\benlitz\private\puzzle\Puzzle.vcxproj", "{9F291982-8C81-4105-BF39-16844648E55F}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Puzzle", "..\..\people\benlitz\puzzle\Puzzle.vcxproj", "{9F291982-8C81-4105-BF39-16844648E55F}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lolui", "..\..\people\benlitz\private\lolui\lolui.vcxproj", "{950EDCC1-DF6A-4A75-B083-DFE98E7DD34F}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lolui", "..\..\people\benlitz\lolui\lolui.vcxproj", "{950EDCC1-DF6A-4A75-B083-DFE98E7DD34F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SinglShot", "SinglShot", "{50509BA3-D27B-4FAC-9772-9EC76146F709}"
EndProject
@@ -176,6 +176,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pimp", "Pimp", "{2195FB18-5
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pimp", "..\..\tools\pimp\pimp.vcxproj", "{FFF58874-D460-41E6-AD65-DBFEC6E47A94}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "squad_shooter", "..\..\people\touky\private\squad_shooter\squad_shooter.vcxproj", "{DB344310-4938-4294-AEE2-18512454585D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ORBIS = Debug|ORBIS


+ 2
- 2
configure.ac 查看文件

@@ -557,8 +557,8 @@ AC_CONFIG_FILES(
people/peeweek/Makefile
people/benlitz/Makefile
people/benlitz/test1/Makefile
people/benlitz/private/voxel/Makefile
people/benlitz/private/lolui/Makefile
people/benlitz/voxel/Makefile
people/benlitz/lolui/Makefile
people/touky/Makefile
people/touky/sprite_sorter/Makefile
people/touky/squad_shooter/Makefile


+ 14
- 18
demos/tutorial/05_easymesh.cpp 查看文件

@@ -118,32 +118,28 @@ public:

if (!m_ready)
{
g_renderer->SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));

/* Upload vertex data to GPU */
for (int i = 0; i < m_gears.Count(); i++)
m_gears[i].m1.MeshConvert();

#if USE_CUSTOM_SHADER
//Custom Shader: Init the shader
m_custom_shader = Shader::Create(LOLFX_RESOURCE_NAME(shiny));
/* Custom Shader: Init the shader */
Shader *custom_shader = Shader::Create(LOLFX_RESOURCE_NAME(shiny));
// any other shader stuf here (Get uniform, mostly, and set texture)
#endif //USE_CUSTOM_SHADER

g_renderer->SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));
for (int i = 0; i < m_gears.Count(); i++)
{
#if USE_CUSTOM_SHADER
//Custom shader, Convert by setuping a shaderData with the vertex useage.
//DefaultShaderData is only a basic class, if needed, don't hesitate to create your own
m_gears[i].m1.MeshConvert(new DefaultShaderData(
((1 << VertexUsage::Position) |
(1 << VertexUsage::Normal) |
(1 << VertexUsage::Color)),
m_custom_shader, false));
#else //USE_CUSTOM_SHADER
m_gears[i].m1.MeshConvert();
#endif //USE_CUSTOM_SHADER
}
m_gears[i].m1.SetMaterial(custom_shader);
#endif

m_ready = true;
}

for (int i = 0; i < m_gears.Count(); i++)
m_gears[i].m1.Render(m_mat * m_gears[i].m2);
{
g_scene->AddPrimitive(m_gears[i].m1, m_mat * m_gears[i].m2);
}
}

private:


+ 4
- 2
src/core.h 查看文件

@@ -137,8 +137,10 @@ static inline int isnan(float f)

/* External declaration for LolFx files. */
#define LOLFX_RESOURCE_DECLARE(name) \
extern "C" char const *LOLFX_RESOURCE_NAME(name)
#define LOLFX_RESOURCE_NAME(name) lolfx_resource_##name
extern "C" char const *lolfx_resource_##name
#define LOLFX_RESOURCE_HELPER(name) #name ".lolfx"
#define LOLFX_RESOURCE_NAME(name) \
LOLFX_RESOURCE_HELPER(name), lolfx_resource_##name

/* If using NaCl or Android, override main() with our version */
#if defined __native_client__


+ 45
- 46
src/easymesh/easymesh.cpp 查看文件

@@ -22,6 +22,8 @@
#include "core.h"
#include "easymesh/easymesh-compiler.h"

LOLFX_RESOURCE_DECLARE(shiny);

namespace lol
{

@@ -40,7 +42,6 @@ EasyMesh::EasyMesh(const EasyMesh& em)
m_vert = em.m_vert;
m_cursors = em.m_cursors;
m_build_data = nullptr;
m_gpu_data = GpuEasyMeshData();
if (em.m_build_data)
m_build_data = new EasyMeshBuildData(*em.m_build_data);
if (m_indices.Count() && m_vert.Count() && m_cursors.Count())
@@ -64,6 +65,49 @@ bool EasyMesh::Compile(char const *command, bool Execute)
return res;
}

void EasyMesh::MeshConvert()
{
/* Default material */
Shader *shader = Shader::Create(LOLFX_RESOURCE_NAME(shiny));

/* Push index buffer to GPU */
IndexBuffer *ibo = new IndexBuffer(m_indices.Count() * sizeof(uint16_t));
uint16_t *indices = (uint16_t *)ibo->Lock(0, 0);
for (int i = 0; i < m_indices.Count(); ++i)
indices[i] = m_indices[i];
ibo->Unlock();

/* Push vertex buffer to GPU */
struct Vertex
{
vec3 pos, normal;
u8vec4 color;
vec4 texcoord;
};

VertexDeclaration *vdecl = new VertexDeclaration(
VertexStream<vec3, vec3, u8vec4, vec4>(VertexUsage::Position,
VertexUsage::Normal,
VertexUsage::Color,
VertexUsage::TexCoord));

VertexBuffer *vbo = new VertexBuffer(m_vert.Count() * sizeof(Vertex));
Vertex *vert = (Vertex *)vbo->Lock(0, 0);
for (int i = 0; i < m_vert.Count(); ++i)
{
vert[i].pos = m_vert[i].m_coord,
vert[i].normal = m_vert[i].m_normal,
vert[i].color = (u8vec4)(m_vert[i].m_color * 255.f);
vert[i].texcoord = m_vert[i].m_texcoord;
}
vbo->Unlock();

/* Reference our new data in our submesh */
m_submeshes.Push(new SubMesh(shader, vdecl));
m_submeshes.Last()->SetIndexBuffer(ibo);
m_submeshes.Last()->SetVertexBuffer(0, vbo);
}

//-----------------------------------------------------------------------------
#define EZSET(M0) BD()->CmdStack().GetValue(M0);
#define EZDEF_1(T0) T0 m0; EZSET(m0)
@@ -228,51 +272,6 @@ void EasyMesh::CloseBrace()

m_cursors.Pop();
}
//-----------------------------------------------------------------------------
void EasyMesh::MeshConvert(GpuShaderData* new_gpu_sdata)
{
delete(m_build_data);
m_build_data = nullptr;

if (new_gpu_sdata)
{
m_gpu_data.AddGpuData(new_gpu_sdata, this);
for (int i = DebugRenderMode::Default; i < DebugRenderMode::Max; i++)
if (!m_gpu_data.HasData(i))
m_gpu_data.AddGpuData(new DefaultShaderData(DebugRenderMode(i)), this);
}
m_state = MeshRender::CanRender;
}

//-----------------------------------------------------------------------------
void EasyMesh::MeshConvert(Shader* provided_shader)
{
if (provided_shader)
{
GpuShaderData *new_gpu_sdata = new DefaultShaderData(((1 << VertexUsage::Position) |
(1 << VertexUsage::Normal) |
(1 << VertexUsage::Color)),
provided_shader,
false);
m_gpu_data.AddGpuData(new_gpu_sdata, this);
}
else
m_gpu_data.AddGpuData(new DefaultShaderData(DebugRenderMode::Default), this);
for (int i = DebugRenderMode::Default + 1; i < DebugRenderMode::Max; i++)
m_gpu_data.AddGpuData(new DefaultShaderData(DebugRenderMode(i)), this);
m_state = MeshRender::CanRender;
}

//-----------------------------------------------------------------------------
bool EasyMesh::Render(mat4 const &model, int render_mode)
{
if (m_state == MeshRender::CanRender)
{
m_gpu_data.RenderMeshData(model, render_mode);
return true;
}
return false;
}

//-----------------------------------------------------------------------------
bool EasyMesh::SetRender(bool should_render)


+ 7
- 9
src/easymesh/easymesh.h 查看文件

@@ -48,7 +48,7 @@ LOL_SAFE_ENUM(MeshTransform,
Shear
);

class EasyMesh
class EasyMesh : public Mesh
{
friend class EasyMeshParser;
friend class GpuEasyMeshData;
@@ -57,13 +57,11 @@ public:
EasyMesh();
EasyMesh(const EasyMesh& em);

bool Compile(char const *command, bool Execute=true);
void ExecuteCmdStack(bool ExecAllStack=true);
void MeshConvert(GpuShaderData* new_gpu_sdata);
void MeshConvert(Shader* ProvidedShader = nullptr);
bool Render(mat4 const &model, int render_mode=Video::GetDebugRenderMode());
MeshRender GetMeshState() { return m_state; }
bool SetRender(bool should_render);
bool Compile(char const *command, bool Execute = true);
void ExecuteCmdStack(bool ExecAllStack = true);
void MeshConvert();
MeshRender GetMeshState() { return m_state; }
bool SetRender(bool should_render);

private:
void UpdateVertexDict(Array< int, int > &vertex_dict);
@@ -73,6 +71,7 @@ private:
//-------------------------------------------------------------------------
private:
void MeshCsg(CSGUsage csg_operation);

public:
/* [cmd:csgu] Performs a Union operation as (mesh0_Outside + mesh1_Outside) */
void CsgUnion() { MeshCsg(CSGUsage::Union); }
@@ -386,7 +385,6 @@ public:
Array<int, int> m_cursors;

MeshRender m_state;
GpuEasyMeshData m_gpu_data;

public:
inline EasyMeshBuildData* BD()


+ 4
- 2
src/easymesh/easymeshrender.cpp 查看文件

@@ -120,9 +120,10 @@ DefaultShaderData::DefaultShaderData(uint16_t vert_decl_flags, Shader* shader, b
SetupDefaultData(with_UV);
}

static const String DefaultUniforms[7] =
static const String DefaultUniforms[8] =
{
String("u_lights"),
String("u_model"),
String("u_modelview"),
String("u_view"),
String("u_inv_view"),
@@ -160,12 +161,13 @@ void DefaultShaderData::SetupShaderDatas(mat4 const &model)
/* FIXME: GetUniform("blabla") is costly */
for (int i = 0; i < lights.Count(); ++i)
light_data << vec4(lights[i]->GetPosition(), lights[i]->GetType()) << lights[i]->GetColor();
while (light_data.Count() < 8)
while (light_data.Count() < LOL_MAX_LIGHT_COUNT)
light_data << vec4::zero << vec4::zero;

int i = 0;
m_shader->SetUniform(*GetUniform(DefaultUniforms[i++]), light_data);

m_shader->SetUniform(*GetUniform(DefaultUniforms[i++]), model);
m_shader->SetUniform(*GetUniform(DefaultUniforms[i++]), modelview);
m_shader->SetUniform(*GetUniform(DefaultUniforms[i++]), view);
m_shader->SetUniform(*GetUniform(DefaultUniforms[i++]), inverse(view));


+ 4
- 4
src/easymesh/shiny.lolfx 查看文件

@@ -8,7 +8,7 @@ attribute vec4 in_Color;

uniform mat4 u_modelview;
uniform mat4 u_view;
uniform mat4 u_proj;
uniform mat4 u_projection;
uniform mat3 u_normalmat;

varying vec4 pass_Vertex; /* View space */
@@ -24,7 +24,7 @@ void main(void)
pass_TNormal = tnorm;
pass_Color = in_Color;

gl_Position = u_proj * vertex;
gl_Position = u_projection * vertex;
}

[frag.glsl]
@@ -138,7 +138,7 @@ void main(float3 in_Vertex : POSITION,
float3 in_Normal : NORMAL,
float4 in_Color : COLOR,
uniform float4x4 u_modelview,
uniform float4x4 u_proj,
uniform float4x4 u_projection,
uniform float3x3 u_normalmat,
out float4 pass_Vertex : TEXCOORD0,
out float3 pass_TNormal : TEXCOORD1,
@@ -156,7 +156,7 @@ void main(float3 in_Vertex : POSITION,
pass_Color = in_Color;
#endif

out_Position = mul(u_proj, eye);
out_Position = mul(u_projection, eye);
}

[frag.hlsl]


+ 4
- 4
src/easymesh/shiny_SK.lolfx 查看文件

@@ -10,7 +10,7 @@ attribute vec2 in_Weight;

uniform mat4 u_modelview;
uniform mat4 u_view;
uniform mat4 u_proj;
uniform mat4 u_projection;
uniform mat3 u_normalmat;
//10is not a fix idea, should be more.
uniform mat4 in_BoneList[10];
@@ -28,7 +28,7 @@ void main(void)
pass_TNormal = tnorm;
pass_Color = in_Color;

gl_Position = u_proj * vertex;
gl_Position = u_projection * vertex;
}

[frag.glsl]
@@ -163,7 +163,7 @@ void main(float3 in_Vertex : POSITION,
float3 in_Normal : NORMAL,
float4 in_Color : COLOR,
uniform float4x4 u_modelview,
uniform float4x4 u_proj,
uniform float4x4 u_projection,
uniform float3x3 u_normalmat,
out float4 pass_Vertex : TEXCOORD0,
out float3 pass_TNormal : TEXCOORD1,
@@ -181,7 +181,7 @@ void main(float3 in_Vertex : POSITION,
pass_Color = in_Color;
#endif

out_Position = mul(u_proj, eye);
out_Position = mul(u_projection, eye);
}

[frag.hlsl]


+ 4
- 4
src/easymesh/shinydebugUV.lolfx 查看文件

@@ -9,7 +9,7 @@ attribute vec2 in_TexCoord;

uniform mat4 u_modelview;
uniform mat4 u_view;
uniform mat4 u_proj;
uniform mat4 u_projection;
uniform mat3 u_normalmat;

varying vec4 pass_Vertex; /* View space */
@@ -27,7 +27,7 @@ void main(void)
pass_Color = in_Color;
pass_TexCoord = in_TexCoord;

gl_Position = u_proj * vertex;
gl_Position = u_projection * vertex;
}

[frag.glsl]
@@ -97,7 +97,7 @@ void main(float3 in_Vertex : POSITION,
float3 in_Normal : NORMAL,
float4 in_Color : COLOR,
uniform float4x4 u_modelview,
uniform float4x4 u_proj,
uniform float4x4 u_projection,
uniform float3x3 u_normalmat,
out float4 pass_Vertex : TEXCOORD0,
out float3 pass_TNormal : TEXCOORD1,
@@ -115,7 +115,7 @@ void main(float3 in_Vertex : POSITION,
pass_Color = in_Color;
#endif

out_Position = mul(u_proj, eye);
out_Position = mul(u_projection, eye);
}

[frag.hlsl]


+ 4
- 4
src/easymesh/shinydebuglighting.lolfx 查看文件

@@ -8,7 +8,7 @@ attribute vec4 in_Color;

uniform mat4 u_modelview;
uniform mat4 u_view;
uniform mat4 u_proj;
uniform mat4 u_projection;
uniform mat3 u_normalmat;

varying vec4 pass_Vertex; /* View space */
@@ -24,7 +24,7 @@ void main(void)
pass_TNormal = tnorm;
pass_Color = vec4(1.0, 1.0, 1.0, in_Color.w);//;

gl_Position = u_proj * vertex;
gl_Position = u_projection * vertex;
}

[frag.glsl]
@@ -97,7 +97,7 @@ void main(float3 in_Vertex : POSITION,
float3 in_Normal : NORMAL,
float4 in_Color : COLOR,
uniform float4x4 u_modelview,
uniform float4x4 u_proj,
uniform float4x4 u_projection,
uniform float3x3 u_normalmat,
out float4 pass_Vertex : TEXCOORD0,
out float3 pass_TNormal : TEXCOORD1,
@@ -115,7 +115,7 @@ void main(float3 in_Vertex : POSITION,
pass_Color = in_Color;
#endif

out_Position = mul(u_proj, eye);
out_Position = mul(u_projection, eye);
}

[frag.hlsl]


+ 4
- 4
src/easymesh/shinydebugnormal.lolfx 查看文件

@@ -8,7 +8,7 @@ attribute vec4 in_Color;

uniform mat4 u_modelview;
uniform mat4 u_view;
uniform mat4 u_proj;
uniform mat4 u_projection;
uniform mat3 u_normalmat;

varying vec4 pass_Vertex; /* View space */
@@ -24,7 +24,7 @@ void main(void)
pass_TNormal = tnorm;
pass_Color = in_Color;

gl_Position = u_proj * vertex;
gl_Position = u_projection * vertex;
}

[frag.glsl]
@@ -59,7 +59,7 @@ void main(float3 in_Vertex : POSITION,
float3 in_Normal : NORMAL,
float4 in_Color : COLOR,
uniform float4x4 u_modelview,
uniform float4x4 u_proj,
uniform float4x4 u_projection,
uniform float3x3 u_normalmat,
out float4 pass_Vertex : TEXCOORD0,
out float3 pass_TNormal : TEXCOORD1,
@@ -77,7 +77,7 @@ void main(float3 in_Vertex : POSITION,
pass_Color = in_Color;
#endif

out_Position = mul(u_proj, eye);
out_Position = mul(u_projection, eye);
}

[frag.hlsl]


+ 4
- 4
src/easymesh/shinydebugwireframe.lolfx 查看文件

@@ -8,7 +8,7 @@ attribute vec4 in_Color;

uniform mat4 u_modelview;
uniform mat4 u_view;
uniform mat4 u_proj;
uniform mat4 u_projection;
uniform mat3 u_normalmat;

varying vec4 pass_Vertex; /* View space */
@@ -24,7 +24,7 @@ void main(void)
pass_TNormal = tnorm;
pass_Color = in_Color;

gl_Position = u_proj * vertex;
gl_Position = u_projection * vertex;
}

[frag.glsl]
@@ -55,7 +55,7 @@ void main(float3 in_Vertex : POSITION,
float3 in_Normal : NORMAL,
float4 in_Color : COLOR,
uniform float4x4 u_modelview,
uniform float4x4 u_proj,
uniform float4x4 u_projection,
uniform float3x3 u_normalmat,
out float4 pass_Vertex : TEXCOORD0,
out float3 pass_TNormal : TEXCOORD1,
@@ -73,7 +73,7 @@ void main(float3 in_Vertex : POSITION,
pass_Color = in_Color;
#endif

out_Position = mul(u_proj, eye);
out_Position = mul(u_projection, eye);
}

[frag.hlsl]


+ 4
- 4
src/easymesh/shinyflat.lolfx 查看文件

@@ -8,7 +8,7 @@ attribute vec4 in_Color;

uniform mat4 u_modelview;
uniform mat4 u_view;
uniform mat4 u_proj;
uniform mat4 u_projection;
uniform mat3 u_normalmat;

varying vec4 pass_Vertex; /* View space */
@@ -24,7 +24,7 @@ void main(void)
pass_TNormal = tnorm;
pass_Color = in_Color;

gl_Position = u_proj * vertex;
gl_Position = u_projection * vertex;
}

[frag.glsl]
@@ -141,7 +141,7 @@ void main(float3 in_Vertex : POSITION,
float3 in_Normal : NORMAL,
float4 in_Color : COLOR,
uniform float4x4 u_modelview,
uniform float4x4 u_proj,
uniform float4x4 u_projection,
uniform float3x3 u_normalmat,
out float4 pass_Vertex : TEXCOORD0,
out float3 pass_TNormal : TEXCOORD1,
@@ -159,7 +159,7 @@ void main(float3 in_Vertex : POSITION,
pass_Color = in_Color;
#endif

out_Position = mul(u_proj, eye);
out_Position = mul(u_projection, eye);
}

[frag.hlsl]


+ 5
- 0
src/gpu/indexbuffer.cpp 查看文件

@@ -96,6 +96,11 @@ IndexBuffer::~IndexBuffer()
delete m_data;
}

size_t IndexBuffer::GetSize()
{
return m_data->m_size;
}

void *IndexBuffer::Lock(size_t offset, size_t size)
{
if (!m_data->m_size)


+ 40
- 26
src/gpu/shader.cpp 查看文件

@@ -84,6 +84,8 @@ class ShaderData
friend class Shader;

private:
String m_name;

#if defined USE_D3D9
IDirect3DDevice9 *m_dev;
IDirect3DVertexShader9 *vert_shader;
@@ -98,6 +100,7 @@ private:
GLuint prog_id, vert_id, frag_id;
// Benlitz: using a simple array could be faster since there is never more than a few attribute locations to store
Map<uint64_t, GLint> attrib_locations;
Map<uint64_t, bool> attrib_errors;
#else
CGprogram vert_id, frag_id;
#endif
@@ -121,16 +124,14 @@ int ShaderData::nshaders = 0;
* Public Shader class
*/

Shader *Shader::Create(char const *lolfx)
Shader *Shader::Create(String const &name, String const &code)
{
char *src = new char[strlen(lolfx) + 2];
memcpy(src + 1, lolfx, strlen(lolfx) + 1);
src[0] = '\n';
String src = String("\n") + code;

/* Parse the crap */
Array<char const *, char const *> sections;
char *key = nullptr;
for (char *parser = src; *parser; )
for (char *parser = src.C(); *parser; )
{
if (key == nullptr && (parser[0] == '\n' || parser[0] == '\r')
&& parser[1] == '[')
@@ -173,9 +174,11 @@ Shader *Shader::Create(char const *lolfx)

/* FIXME: we don’t know how to handle these yet. */
if (!vert)
Log::Error("no vertex shader found… sorry, I’m gonna crash now.\n");
Log::Error("no vertex shader found in %s… sorry, I’m gonna crash now.\n",
name.C());
if (!frag)
Log::Error("no fragment shader found… sorry, I’m gonna crash now.\n");
Log::Error("no fragment shader found in %s… sorry, I’m gonna crash now.\n",
name.C());

uint32_t new_vert_crc = ShaderData::hash(vert);
uint32_t new_frag_crc = ShaderData::hash(frag);
@@ -185,16 +188,14 @@ Shader *Shader::Create(char const *lolfx)
if (ShaderData::shaders[n]->data->vert_crc == new_vert_crc
&& ShaderData::shaders[n]->data->frag_crc == new_frag_crc)
{
delete[] src;
return ShaderData::shaders[n];
}
}

Shader *ret = new Shader(vert, frag);
Shader *ret = new Shader(name, vert, frag);
ShaderData::shaders[ShaderData::nshaders] = ret;
ShaderData::nshaders++;

delete[] src;
return ret;
}

@@ -204,9 +205,12 @@ void Shader::Destroy(Shader *shader)
UNUSED(shader);
}

Shader::Shader(char const *vert, char const *frag)
Shader::Shader(String const &name,
char const *vert, char const *frag)
: data(new ShaderData())
{
data->m_name = name;

#if defined USE_D3D9 || defined _XBOX
ID3DXBuffer *shader_code, *error_msg;
HRESULT hr;
@@ -243,7 +247,7 @@ Shader::Shader(char const *vert, char const *frag)
&data->vert_table);
if (FAILED(hr))
{
Log::Error("failed to compile vertex shader: %s",
Log::Error("failed to compile vertex shader %s: %s\n", name.C(),
error_msg ? error_msg->GetBufferPointer() : "error");
Log::Error("shader source:\n%s\n", vert);
}
@@ -261,12 +265,13 @@ Shader::Shader(char const *vert, char const *frag)
glGetShaderiv(data->vert_id, GL_COMPILE_STATUS, &status);
if (status != GL_TRUE)
{
Log::Error("failed to compile vertex shader: %s", errbuf);
Log::Error("failed to compile vertex shader %s: %s\n",
name.C(), errbuf);
Log::Error("shader source:\n%s\n", shader_code.C());
}
else if (len > 16)
{
Log::Debug("compile log for vertex shader: %s", errbuf);
Log::Debug("compile log for vertex shader %s: %s\n", name.C(), errbuf);
Log::Debug("shader source:\n%s\n", shader_code.C());
}
#else
@@ -275,7 +280,7 @@ Shader::Shader(char const *vert, char const *frag)
nullptr, nullptr);
if (data->vert_id == nullptr)
{
Log::Error("failed to compile vertex shader");
Log::Error("failed to compile vertex shader %s\n", name.C());
Log::Error("shader source:\n%s\n", vert);
}
#endif
@@ -288,7 +293,7 @@ Shader::Shader(char const *vert, char const *frag)
&data->frag_table);
if (FAILED(hr))
{
Log::Error("failed to compile fragment shader: %s",
Log::Error("failed to compile fragment shader %s: %s\n", name.C(),
error_msg ? error_msg->GetBufferPointer() : "error");
Log::Error("shader source:\n%s\n", frag);
}
@@ -306,12 +311,14 @@ Shader::Shader(char const *vert, char const *frag)
glGetShaderiv(data->frag_id, GL_COMPILE_STATUS, &status);
if (status != GL_TRUE)
{
Log::Error("failed to compile fragment shader: %s", errbuf);
Log::Error("failed to compile fragment shader %s: %s\n",
name.C(), errbuf);
Log::Error("shader source:\n%s\n", shader_code.C());
}
else if (len > 16)
{
Log::Debug("compile log for fragment shader: %s", errbuf);
Log::Debug("compile log for fragment shader %s: %s\n",
name.C(), errbuf);
Log::Debug("shader source:\n%s\n", shader_code.C());
}
#else
@@ -320,7 +327,7 @@ Shader::Shader(char const *vert, char const *frag)
nullptr, nullptr);
if (data->frag_id == nullptr)
{
Log::Error("failed to compile fragment shader");
Log::Error("failed to compile fragment shader %s\n", name.C());
Log::Error("shader source:\n%s\n", frag);
}
#endif
@@ -355,11 +362,11 @@ Shader::Shader(char const *vert, char const *frag)
glGetProgramiv(data->prog_id, GL_LINK_STATUS, &status);
if (status != GL_TRUE)
{
Log::Error("failed to link program: %s", errbuf);
Log::Error("failed to link program %s: %s\n", name.C(), errbuf);
}
else if (len > 16)
{
Log::Debug("link log for program: %s", errbuf);
Log::Debug("link log for program %s: %s\n", name.C(), errbuf);
}

GLint validated;
@@ -367,7 +374,7 @@ Shader::Shader(char const *vert, char const *frag)
glGetProgramiv(data->prog_id, GL_VALIDATE_STATUS, &validated);
if (validated != GL_TRUE)
{
Log::Error("failed to validate program");
Log::Error("failed to validate program %s\n", name.C());
}

GLint num_attribs;
@@ -413,10 +420,11 @@ Shader::Shader(char const *vert, char const *frag)
uint64_t flags = (uint64_t)(uint16_t)usage.ToScalar() << 16;
flags |= (uint64_t)(uint16_t)index;
// TODO: this is here just in case. Remove this once everything has been correctly tested
#ifdef _DEBUG
#if _DEBUG
if (data->attrib_locations.HasKey(flags))
{
Log::Error("an error occured while parsing attribute semantics");
Log::Error("error while parsing attribute semantics in %s\n",
name.C());
}
#endif
data->attrib_locations[flags] = location;
@@ -444,11 +452,17 @@ ShaderAttrib Shader::GetAttribLocation(VertexUsage usage, int index) const
ret.m_flags |= (uint64_t)(uint16_t)index;
#if defined USE_D3D9 || defined _XBOX
#elif !defined __CELLOS_LV2__
GLint l;
GLint l = -1;

if (!data->attrib_locations.TryGetValue(ret.m_flags, l))
{
Log::Error("queried attribute is unavailable for this shader");
/* Only spit an error once, we don’t need to flood the console. */
if (!data->attrib_errors.HasKey(ret.m_flags))
{
Log::Error("attribute %s not found in shader %s\n",
usage.ToString().C(), data->m_name.C());
data->attrib_errors[ret.m_flags] = true;
}
}
ret.m_flags |= (uint64_t)(uint32_t)l << 32;
#else


+ 1
- 1
src/gpu/vertexbuffer.cpp 查看文件

@@ -367,7 +367,7 @@ void VertexDeclaration::SetStream(VertexBuffer *vb, ShaderAttrib attribs[])
uint32_t reg = attribs[n].m_flags >> 32;

# if !defined __CELLOS_LV2__
if (reg != 0xffffffff)
if (reg != 0xffffffffu)
glEnableVertexAttribArray((GLint)reg);
# else
switch (usage.ToScalar())


+ 1
- 1
src/image/codec/zed-image.cpp 查看文件

@@ -56,7 +56,7 @@ bool ZedImageData::Open(char const *path)
if (!lol::String(path).EndsWith(".RSC"))
return false;

//Compacter definition
// Compacter definition
struct CompactSecondary
{
CompactSecondary(int32_t size) { m_size = size; }


+ 2
- 0
src/lol/gpu/indexbuffer.h 查看文件

@@ -27,6 +27,8 @@ public:
IndexBuffer(size_t size);
~IndexBuffer();

size_t GetSize();

void *Lock(size_t offset, size_t size);
void Unlock();



+ 18
- 0
src/lol/gpu/renderer.h 查看文件

@@ -53,6 +53,24 @@ enum class BlendEquation : uint8_t
Max,
};

/* A safe enum to indicate the blend equation. */
struct BlendEquation
{
enum Value
{
Add,
Subtract,
ReverseSubtract,
Min,
Max,
}
m_value;

inline BlendEquation() : m_value(Add) {}
inline BlendEquation(Value v) : m_value(v) {}
inline operator Value() { return m_value; }
};

/* A safe enum to indicate the blending factors. */
enum class BlendFunc : uint8_t
{


+ 3
- 3
src/lol/gpu/shader.h 查看文件

@@ -90,10 +90,10 @@ private:

class ShaderData;

class Shader
class Shader : public Entity
{
public:
static Shader *Create(char const *lolfx);
static Shader *Create(String const &name, String const &code);
static void Destroy(Shader *shader);

int GetAttribCount() const;
@@ -122,7 +122,7 @@ public:
void Unbind() const;

protected:
Shader(char const *vert, char const *frag);
Shader(String const &name, char const *vert, char const *frag);
~Shader();

private:


+ 1
- 0
src/lol/sys/thread.h 查看文件

@@ -99,6 +99,7 @@ public:
protected:
//Work stuff
bool AddWork(ThreadJob* job);

//Fetch Results
bool FetchResult(Array<ThreadJob*>& results);
//Base thread work function


+ 48
- 16
src/mesh/mesh.cpp 查看文件

@@ -32,24 +32,33 @@ Mesh::~Mesh()
{
}

void Mesh::Render(mat4 const &model)
void Mesh::Render()
{
//for (int i = 0; i < m_submeshes.Count(); ++i)
// m_submeshes[i]->Render(model);
for (int i = 0; i < m_submeshes.Count(); ++i)
m_submeshes[i]->Render();
}

void Mesh::SetMaterial(Shader *shader)
{
for (int i = 0; i < m_submeshes.Count(); ++i)
m_submeshes[i]->SetShader(shader);
}

/*
* SubMesh class
*/

SubMesh::SubMesh(lol::VertexDeclaration* vdecl)
: m_mesh_prim(MeshPrimitive::Triangles)
SubMesh::SubMesh(Shader *shader, VertexDeclaration *vdecl)
: m_mesh_prim(MeshPrimitive::Triangles),
m_shader(shader),
m_vdecl(vdecl)
{
m_vdecl = vdecl;
Ticker::Ref(m_shader);
}

SubMesh::~SubMesh()
{
Ticker::Unref(m_shader);
// TODO: cleanup
}

@@ -58,6 +67,23 @@ void SubMesh::SetMeshPrimitive(MeshPrimitive mesh_primitive)
m_mesh_prim = mesh_primitive;
}

void SubMesh::SetShader(Shader *shader)
{
Ticker::Unref(m_shader);
m_shader = shader;
Ticker::Ref(m_shader);
}

Shader *SubMesh::GetShader()
{
return m_shader;
}

void SubMesh::SetVertexDeclaration(VertexDeclaration *vdecl)
{
m_vdecl = vdecl;
}

void SubMesh::SetVertexBuffer(int index, VertexBuffer* vbo)
{
while (index >= m_vbos.Count())
@@ -66,12 +92,17 @@ void SubMesh::SetVertexBuffer(int index, VertexBuffer* vbo)
m_vbos[index] = vbo;
}

void SubMesh::SetIndexBuffer(IndexBuffer* ibo)
{
m_ibo = ibo;
}

void SubMesh::AddTexture(const char* name, Texture* texture)
{
m_textures.Push(String(name), texture);
}

void SubMesh::Render(Shader* shader)
void SubMesh::Render()
{
int vertex_count = 0;

@@ -81,19 +112,17 @@ void SubMesh::Render(Shader* shader)

if (m_vbos[i] == nullptr)
{
Log::Error("trying to render a mesh with a null vbo");
return;
Log::Error("trying to render a mesh with a null VBO\n");
continue;
}

int indices[VertexUsage::MAX];
memset(indices, 0, sizeof(int) * VertexUsage::MAX);

int usages[VertexUsage::MAX] = { 0 };
VertexStreamBase stream = m_vdecl->GetStream(i);
for (int j = 0; j < stream.GetStreamCount(); ++j)
{
VertexUsage usage = stream.GetUsage(j);
int usage_index = usage.ToScalar();
attribs[j] = shader->GetAttribLocation(usage, indices[usage_index]++);
attribs[j] = m_shader->GetAttribLocation(usage, usages[usage_index]++);
}

vertex_count = m_vbos[i]->GetSize() / m_vdecl->GetStream(i).GetSize();
@@ -104,13 +133,16 @@ void SubMesh::Render(Shader* shader)
for (int i = 0; i < m_textures.Count(); ++i)
{
// TODO: might be good to cache this
ShaderUniform u_tex = shader->GetUniformLocation(m_textures[i].m1.C());
shader->SetUniform(u_tex, m_textures[i].m2->GetTextureUniform(), i);
ShaderUniform u_tex = m_shader->GetUniformLocation(m_textures[i].m1.C());
m_shader->SetUniform(u_tex, m_textures[i].m2->GetTextureUniform(), i);
}

m_ibo->Bind();
m_vdecl->Bind();
m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, vertex_count);
m_vdecl->DrawIndexedElements(MeshPrimitive::Triangles, 0, 0, vertex_count,
0, m_ibo->GetSize() / sizeof(uint16_t));
m_vdecl->Unbind();
m_ibo->Unbind();
}

} /* namespace lol */


+ 15
- 5
src/mesh/mesh.h 查看文件

@@ -31,9 +31,12 @@ public:
Mesh();
~Mesh();

void Render(mat4 const &model);
/* FIXME: this should eventually take a “material” as argument, which
* may behave differently between submeshes. */
void SetMaterial(Shader *shader);
void Render();

private:
public:
Array<class SubMesh *> m_submeshes;
};

@@ -42,24 +45,31 @@ private:
* - a vertex declaration
* - a list of VBOs
* - a list of textures
* - a shader
*/

class SubMesh
{
public:
SubMesh(VertexDeclaration* vdecl);
SubMesh(Shader *shader, VertexDeclaration* vdecl);
~SubMesh();

void SetMeshPrimitive(MeshPrimitive mesh_primitive);
void SetShader(Shader *shader);
Shader *GetShader();
void SetVertexDeclaration(VertexDeclaration *vdecl);
void SetVertexBuffer(int index, VertexBuffer* vbo);
void SetIndexBuffer(IndexBuffer* ibo);
void AddTexture(const char* name, Texture* texture);

void Render(Shader* shader);
void Render();

protected:
VertexDeclaration* m_vdecl;
MeshPrimitive m_mesh_prim;
Shader *m_shader;
VertexDeclaration* m_vdecl;
Array<VertexBuffer *> m_vbos;
IndexBuffer *m_ibo;

Array<String, Texture*> m_textures;
};


+ 2
- 3
src/mesh/primitive.cpp 查看文件

@@ -24,9 +24,8 @@ namespace lol
* Primitive class
*/

Primitive::Primitive(Mesh *mesh, Shader *shader, mat4 const &matrix)
: m_mesh(mesh),
m_shader(shader),
Primitive::Primitive(SubMesh *submesh, mat4 const &matrix)
: m_submesh(submesh),
m_matrix(matrix)
{
}


+ 2
- 4
src/mesh/primitive.h 查看文件

@@ -26,13 +26,11 @@ class Primitive
friend class Scene;

public:
Primitive(Mesh *mesh, Shader *shader, mat4 const &matrix);
Primitive(SubMesh *submesh, mat4 const &matrix);
~Primitive();

private:
Mesh *m_mesh;
Shader *m_shader;

SubMesh *m_submesh;
mat4 m_matrix;
};



+ 36
- 6
src/scene.cpp 查看文件

@@ -177,11 +177,16 @@ void Scene::Reset()
data->m_tile_bufs.Empty();

data->m_lights.Empty();
data->m_primitives.Empty();
}

void Scene::AddPrimitive(Mesh *mesh, Shader *shader, mat4 const &matrix)
void Scene::AddPrimitive(Mesh const &mesh, mat4 const &matrix)
{
data->m_primitives.Push(Primitive(mesh, shader, matrix));
for (int i = 0; i < mesh.m_submeshes.Count(); ++i)
{
data->m_primitives.Push(Primitive(mesh.m_submeshes[i],
matrix));
}
}

void Scene::AddTile(TileSet *tileset, int id, vec3 pos, int o, vec2 scale, float angle)
@@ -190,7 +195,7 @@ void Scene::AddTile(TileSet *tileset, int id, vec3 pos, int o, vec2 scale, float

Tile t;
/* FIXME: this sorting only works for a 45-degree camera */
t.prio = -pos.y - 2 * 32 * pos.z + ((float)o ? 0 : 32);
t.prio = -pos.y - (int)(2 * 32 * pos.z) + (o ? 0 : 32);
t.tileset = tileset;
t.id = id;
t.pos = pos;
@@ -242,7 +247,7 @@ void Scene::RenderPrimitives()
* primitives found in the scene graph. When we have one. */

Shader *shader = nullptr;
ShaderUniform u_model, uni_tex, uni_texsize;
ShaderUniform u_model, u_modelview, u_normalmat, uni_tex, uni_texsize;
ShaderAttrib a_pos, a_tex;

for (int i = 0; i < data->m_primitives.Count(); ++i)
@@ -250,25 +255,50 @@ void Scene::RenderPrimitives()
Primitive &p = data->m_primitives[i];

/* If this primitive uses a new shader, update attributes */
if (p.m_shader != shader)
if (p.m_submesh->GetShader() != shader)
{
shader = p.m_shader;
shader = p.m_submesh->GetShader();

a_pos = shader->GetAttribLocation(VertexUsage::Position, 0);
a_tex = shader->GetAttribLocation(VertexUsage::TexCoord, 0);

shader->Bind();

/* Per-scene matrices */
ShaderUniform u_mat;
u_mat = shader->GetUniformLocation("u_projection");
shader->SetUniform(u_mat, GetCamera()->GetProjection());
u_mat = shader->GetUniformLocation("u_view");
shader->SetUniform(u_mat, GetCamera()->GetView());
u_mat = shader->GetUniformLocation("u_inv_view");
shader->SetUniform(u_mat, inverse(GetCamera()->GetView()));

/* Per-object matrices, will be set later */
u_model = shader->GetUniformLocation("u_model");
u_modelview = shader->GetUniformLocation("u_modelview");
u_normalmat = shader->GetUniformLocation("u_normalmat");

/* Per-scene environment */
Array<Light *> const &lights = GetLights();
Array<vec4> light_data;

/* FIXME: the 4th component of the position can be used for other things */
/* FIXME: GetUniform("blabla") is costly */
for (int i = 0; i < lights.Count(); ++i)
light_data << vec4(lights[i]->GetPosition(), lights[i]->GetType()) << lights[i]->GetColor();
while (light_data.Count() < LOL_MAX_LIGHT_COUNT)
light_data << vec4::zero << vec4::zero;

ShaderUniform u_lights = shader->GetUniformLocation("u_lights");
shader->SetUniform(u_lights, light_data);
}

shader->SetUniform(u_model, p.m_matrix);
mat4 modelview = GetCamera()->GetView() * p.m_matrix;
shader->SetUniform(u_modelview, modelview);
shader->SetUniform(u_normalmat, transpose(inverse(mat3(modelview))));

p.m_submesh->Render();
}
}



+ 3
- 1
src/scene.h 查看文件

@@ -23,6 +23,8 @@
#include "camera.h"
#include "mesh/primitive.h"

#define LOL_MAX_LIGHT_COUNT 8

namespace lol
{

@@ -49,7 +51,7 @@ public:
void RenderLines(float seconds);

/* New scenegraph */
void AddPrimitive(Mesh *mesh, Shader *shader, mat4 const &matrix);
void AddPrimitive(Mesh const &mesh, mat4 const &matrix);

/* FIXME: this should be deprecated -- it doesn't really match
* the architecture we want to build */


+ 2
- 0
src/sys/thread.cpp 查看文件

@@ -23,6 +23,7 @@ BaseThreadManager::BaseThreadManager(int thread_count)
{
m_thread_count = thread_count;
}

BaseThreadManager::~BaseThreadManager()
{
Stop();
@@ -68,6 +69,7 @@ bool BaseThreadManager::AddWork(ThreadJob* job)
return true;
return false;
}

bool BaseThreadManager::FetchResult(Array<ThreadJob*>& results)
{
ThreadJob* result;


+ 6
- 6
test/meshviewer.cpp 查看文件

@@ -824,12 +824,12 @@ public:
//Camera projection
mat4 new_proj = mat_obj_offset * mat_count_offset * mat_align * mat_count_scale * save_proj;
m_camera->SetProjection(new_proj);
m_meshes[i].m1->Render(m_mat);
g_scene->AddPrimitive(*m_meshes[i].m1, m_mat);
g_renderer->Clear(ClearMask::Depth);
}
m_camera->SetProjection(save_proj);
#else
m_meshes[i].m1->Render(m_mat);
g_scene->AddPrimitive(*m_meshes[i].m1, m_mat);
#endif //ALL_FEATURES
}
}
@@ -839,7 +839,7 @@ public:
{
m_camera->SetProjection(mat_gizmo);
if (m_ssetup->m_show_gizmo)
m_gizmos[GZ_Editor]->Render(m_mat);
g_scene->AddPrimitive(*m_gizmos[GZ_Editor], m_mat);

if (m_ssetup->m_show_lights)
{
@@ -851,12 +851,12 @@ public:
//dir light
if (ltmp->GetType() == LightType::Directional)
{
m_gizmos[GZ_LightPos]->Render(m_mat * inverse(local));
m_gizmos[GZ_LightDir]->Render(inverse(world) * inverse(mat4::lookat(vec3::zero, -ltmp->GetPosition(), vec3::axis_y)));
g_scene->AddPrimitive(*m_gizmos[GZ_LightPos], m_mat * inverse(local));
g_scene->AddPrimitive(*m_gizmos[GZ_LightDir], inverse(world) * inverse(mat4::lookat(vec3::zero, -ltmp->GetPosition(), vec3::axis_y)));
}
else //point light
{
m_gizmos[GZ_LightPos]->Render(m_mat * local);
g_scene->AddPrimitive(*m_gizmos[GZ_LightPos], m_mat * local);
}
}
}


+ 4
- 6
test/physicobject.h 查看文件

@@ -327,18 +327,16 @@ protected:
{
if (!m_ready)
{
if (m_custom_shader)
m_mesh.MeshConvert(m_custom_shader);
else
m_mesh.MeshConvert();
m_mesh.MeshConvert();
/* FIXME: m_custom_shader is ignored */
m_ready = true;
}
else if (m_should_render)
{
if (m_is_character)
m_mesh.Render(m_character->GetTransform());
g_scene->AddPrimitive(m_mesh, m_character->GetTransform());
else
m_mesh.Render(m_physics->GetTransform());
g_scene->AddPrimitive(m_mesh, m_physics->GetTransform());
}
}
}


+ 4
- 4
test/shinyfur.lolfx 查看文件

@@ -8,7 +8,7 @@ attribute vec4 in_Color;

uniform mat4 u_modelview;
uniform mat4 u_view;
uniform mat4 u_proj;
uniform mat4 u_projection;
uniform mat3 u_normalmat;
uniform float in_Damage;

@@ -29,7 +29,7 @@ void main(void)
pass_TNormal = tnorm;
pass_Color = in_Color;

gl_Position = u_proj * vertex;
gl_Position = u_projection * vertex;
}

[frag.glsl]
@@ -121,7 +121,7 @@ void main(float3 in_Vertex : POSITION,
float3 in_Normal : NORMAL,
float4 in_Color : COLOR,
uniform float4x4 u_modelview,
uniform float4x4 u_proj,
uniform float4x4 u_projection,
uniform float3x3 u_normalmat,
out float4 pass_Vertex : TEXCOORD0,
out float3 pass_TNormal : TEXCOORD1,
@@ -139,7 +139,7 @@ void main(float3 in_Vertex : POSITION,
pass_Color = in_Color;
#endif

out_Position = mul(u_proj, eye);
out_Position = mul(u_projection, eye);
}

[frag.hlsl]


+ 4
- 4
test/shinymvtexture.lolfx 查看文件

@@ -9,7 +9,7 @@ attribute vec2 in_TexCoord;

uniform mat4 u_modelview;
uniform mat4 u_view;
uniform mat4 u_proj;
uniform mat4 u_projection;
uniform mat3 u_normalmat;

varying vec4 pass_Vertex; /* View space */
@@ -27,7 +27,7 @@ void main(void)
pass_Color = in_Color;
pass_TexCoord = in_TexCoord;

gl_Position = u_proj * vertex;
gl_Position = u_projection * vertex;
}

[frag.glsl]
@@ -102,7 +102,7 @@ void main(float3 in_Vertex : POSITION,
float3 in_Normal : NORMAL,
float4 in_Color : COLOR,
uniform float4x4 u_modelview,
uniform float4x4 u_proj,
uniform float4x4 u_projection,
uniform float3x3 u_normalmat,
out float4 pass_Vertex : TEXCOORD0,
out float3 pass_TNormal : TEXCOORD1,
@@ -120,7 +120,7 @@ void main(float3 in_Vertex : POSITION,
pass_Color = in_Color;
#endif

out_Position = mul(u_proj, eye);
out_Position = mul(u_projection, eye);
}

[frag.hlsl]


正在加载...
取消
保存