diff --git a/node.cpp b/node.cpp index ba74222..eb99c78 100755 --- a/node.cpp +++ b/node.cpp @@ -43,6 +43,8 @@ namespace vb01{ c->update(); for(ParticleEmitter *p : emitters) p->update(); + /* + */ } } diff --git a/particle.frag b/particle.frag index 1f9610f..5e4d633 100755 --- a/particle.frag +++ b/particle.frag @@ -8,7 +8,7 @@ layout (location=0) out vec4 FragColor; layout (location=1) out vec4 BrightColor; uniform sampler2D tex; -uniform vec4 color[200]; +uniform vec4 color[507]; void main(){ float alpha=texture(tex,texCoords).r; diff --git a/particle.vert b/particle.vert index 918eb40..52fb9cd 100755 --- a/particle.vert +++ b/particle.vert @@ -2,6 +2,7 @@ layout (location=0) in vec3 aPos; layout (location=1) in vec2 aTexCoords; +layout (location=2) in mat4 aInstancedModel; out vec2 texCoords; @@ -9,17 +10,23 @@ flat out int id; uniform mat4 proj; uniform mat4 view; -uniform mat4 model[200]; -uniform vec2 size[200]; +//uniform mat4 model[4]; +uniform vec3 trans[507]; +uniform vec2 size[507]; void main(){ vec3 camLeft=vec3(view[0][0],view[1][0],view[2][0]); vec3 camUp=vec3(view[0][1],view[1][1],view[2][1]); - id=gl_InstanceID; vec2 s=size[gl_InstanceID]; vec3 v=camLeft*s.x*aPos.x+camUp*s.y*aPos.y; - gl_Position=proj*view*model[gl_InstanceID]*vec4(v,1); + mat4 model=aInstancedModel; + model[3][0]=trans[gl_InstanceID].x; + model[3][1]=trans[gl_InstanceID].y; + model[3][2]=trans[gl_InstanceID].z; +/* +*/ + gl_Position=proj*view*model*vec4(v,1); //gl_Position=proj*view*model[gl_InstanceID]*vec4(s.x*aPos.x,s.y*aPos.y,aPos.z,1); texCoords=aTexCoords; } diff --git a/particleEmitter.cpp b/particleEmitter.cpp index a857373..2760c9a 100755 --- a/particleEmitter.cpp +++ b/particleEmitter.cpp @@ -42,14 +42,19 @@ namespace vb01{ ParticleEmitter::Vertex vertices[]={v1,v2,v3,v4,v5,v6}; unsigned int indices[]={0,1,2,3,4,5}; + u32 MBO; + mat4 *matrices=new mat4[numParticles]; + for(int i=0;isetVec3(particles[i].trans,"trans["+to_string(i)+"]"); + shader->setVec4(particles[i].color,"color["+to_string(i)+"]"); + shader->setVec2(particles[i].size,"size["+to_string(i)+"]"); } + /* for(int i=0;isetMat4(particles[i].mat,"model["+to_string(i)+"]"); - shader->setVec4(particles[i].color,"color["+to_string(i)+"]"); - shader->setVec2(particles[i].size,"size["+to_string(i)+"]"); } //glDisable(GL_CULL_FACE); - glBindVertexArray(VAO); - glDrawElementsInstanced(GL_TRIANGLES,6,GL_UNSIGNED_INT,0,numParticles); //glEnable(GL_CULL_FACE); } diff --git a/particleEmitter.h b/particleEmitter.h index bfb871d..4ebd833 100755 --- a/particleEmitter.h +++ b/particleEmitter.h @@ -34,10 +34,11 @@ namespace vb01{ Vector2 texCoords; }; struct Particle{ + int VAO; glm::mat4 mat; s64 time=0,timeToLive=0; Vector4 color; - Vector3 dir; + Vector3 dir,trans; Vector2 size; };