Skip to content

Commit

Permalink
Move Shader from filename constructor back to glow
Browse files Browse the repository at this point in the history
  • Loading branch information
scheibel committed Jun 18, 2014
1 parent 1ea71bb commit bac3654
Show file tree
Hide file tree
Showing 17 changed files with 50 additions and 67 deletions.
4 changes: 2 additions & 2 deletions source/examples/bindless-textures/main.cpp
Expand Up @@ -94,8 +94,8 @@ class EventHandler : public ExampleWindowEventHandler, glowutils::AbstractCoordi

m_program = new glow::Program;
m_program->attach(
glowutils::createShaderFromFile(gl::GL_VERTEX_SHADER, "data/bindless-textures/shader.vert"),
glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, "data/bindless-textures/shader.frag")
glow::Shader::fromFile(gl::GL_VERTEX_SHADER, "data/bindless-textures/shader.vert"),
glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, "data/bindless-textures/shader.frag")
);

std::array<glow::TextureHandle, std::tuple_size<decltype(m_textures)>::value> handles;
Expand Down
2 changes: 1 addition & 1 deletion source/examples/computeshader/main.cpp
Expand Up @@ -168,7 +168,7 @@ void EventHandler::createAndSetupTexture()
void EventHandler::createAndSetupShaders()
{
m_computeProgram = new glow::Program();
m_computeProgram->attach(glowutils::createShaderFromFile(gl::GL_COMPUTE_SHADER, "data/computeshader/cstest.comp"));
m_computeProgram->attach(glow::Shader::fromFile(gl::GL_COMPUTE_SHADER, "data/computeshader/cstest.comp"));

m_computeProgram->setUniform("destTex", 0);
}
Expand Down
8 changes: 4 additions & 4 deletions source/examples/gpu-particles/ComputeShaderParticles.cpp
Expand Up @@ -71,9 +71,9 @@ void ComputeShaderParticles::initialize()

m_drawProgram = new Program();
m_drawProgram->attach(
glowutils::createShaderFromFile(gl::GL_VERTEX_SHADER, "data/gpu-particles/points.vert")
, glowutils::createShaderFromFile(gl::GL_GEOMETRY_SHADER, "data/gpu-particles/points.geom")
, glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, "data/gpu-particles/points.frag"));
glow::Shader::fromFile(gl::GL_VERTEX_SHADER, "data/gpu-particles/points.vert")
, glow::Shader::fromFile(gl::GL_GEOMETRY_SHADER, "data/gpu-particles/points.geom")
, glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, "data/gpu-particles/points.frag"));

m_positionsSSBO = new Buffer();
m_velocitiesSSBO = new Buffer();
Expand Down Expand Up @@ -114,7 +114,7 @@ void ComputeShaderParticles::initialize()

m_quad = new glowutils::ScreenAlignedQuad(m_color);
m_clear = new glowutils::ScreenAlignedQuad(
glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, "data/gpu-particles/clear.frag"));
glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, "data/gpu-particles/clear.frag"));
}

void ComputeShaderParticles::reset()
Expand Down
10 changes: 5 additions & 5 deletions source/examples/gpu-particles/FragmentShaderParticles.cpp
Expand Up @@ -66,7 +66,7 @@ void FragmentShaderParticles::initialize()

// Create screen aligned quad for particle update
m_quadUpdate = new ScreenAlignedQuad(
createShaderFromFile(gl::GL_FRAGMENT_SHADER, "data/gpu-particles/particle.frag"),
Shader::fromFile(gl::GL_FRAGMENT_SHADER, "data/gpu-particles/particle.frag"),
m_texPositions );
m_quadUpdate->program()->setUniform("vertices", 0);
m_quadUpdate->program()->setUniform("velocities", 1);
Expand All @@ -88,15 +88,15 @@ void FragmentShaderParticles::initialize()

// Create screen aligned quads for clear and rendering
m_clear = new ScreenAlignedQuad(
createShaderFromFile(gl::GL_FRAGMENT_SHADER, "data/gpu-particles/clear.frag") );
Shader::fromFile(gl::GL_FRAGMENT_SHADER, "data/gpu-particles/clear.frag") );
m_quad = new ScreenAlignedQuad(m_colorBuffer);

// Create draw program
m_drawProgram = new Program();
m_drawProgram->attach(
createShaderFromFile(gl::GL_VERTEX_SHADER, "data/gpu-particles/points_fragment.vert")
, createShaderFromFile(gl::GL_GEOMETRY_SHADER, "data/gpu-particles/points.geom")
, createShaderFromFile(gl::GL_FRAGMENT_SHADER, "data/gpu-particles/points.frag"));
Shader::fromFile(gl::GL_VERTEX_SHADER, "data/gpu-particles/points_fragment.vert")
, Shader::fromFile(gl::GL_GEOMETRY_SHADER, "data/gpu-particles/points.geom")
, Shader::fromFile(gl::GL_FRAGMENT_SHADER, "data/gpu-particles/points.frag"));
}

void FragmentShaderParticles::reset()
Expand Down
10 changes: 5 additions & 5 deletions source/examples/gpu-particles/TransformFeedbackParticles.cpp
Expand Up @@ -44,7 +44,7 @@ void TransformFeedbackParticles::initialize()
reset();

m_transformFeedbackProgram = new glow::Program();
m_transformFeedbackProgram->attach(glowutils::createShaderFromFile(gl::GL_VERTEX_SHADER, "data/gpu-particles/transformfeedback.vert"));
m_transformFeedbackProgram->attach(glow::Shader::fromFile(gl::GL_VERTEX_SHADER, "data/gpu-particles/transformfeedback.vert"));

m_transformFeedbackProgram->link();

Expand All @@ -53,9 +53,9 @@ void TransformFeedbackParticles::initialize()

m_drawProgram = new Program();
m_drawProgram->attach(
glowutils::createShaderFromFile(gl::GL_VERTEX_SHADER, "data/gpu-particles/points.vert")
, glowutils::createShaderFromFile(gl::GL_GEOMETRY_SHADER, "data/gpu-particles/points.geom")
, glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, "data/gpu-particles/points.frag"));
glow::Shader::fromFile(gl::GL_VERTEX_SHADER, "data/gpu-particles/points.vert")
, glow::Shader::fromFile(gl::GL_GEOMETRY_SHADER, "data/gpu-particles/points.geom")
, glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, "data/gpu-particles/points.frag"));

m_vao = new VertexArrayObject();
m_vao->bind();
Expand Down Expand Up @@ -90,7 +90,7 @@ void TransformFeedbackParticles::initialize()

m_quad = new glowutils::ScreenAlignedQuad(m_color);
m_clear = new glowutils::ScreenAlignedQuad(
glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, "data/gpu-particles/clear.frag"));
glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, "data/gpu-particles/clear.frag"));
}

void TransformFeedbackParticles::reset()
Expand Down
6 changes: 3 additions & 3 deletions source/examples/simple-transformfeedback/main.cpp
Expand Up @@ -181,12 +181,12 @@ void EventHandler::createAndSetupShaders()
{
m_shaderProgram = new glow::Program();
m_shaderProgram->attach(
glowutils::createShaderFromFile(gl::GL_VERTEX_SHADER, "data/transformfeedback/simple.vert")
, glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, "data/transformfeedback/simple.frag"));
glow::Shader::fromFile(gl::GL_VERTEX_SHADER, "data/transformfeedback/simple.vert")
, glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, "data/transformfeedback/simple.frag"));

m_transformFeedbackProgram = new glow::Program();
m_transformFeedbackProgram->attach(
glowutils::createShaderFromFile(gl::GL_VERTEX_SHADER, "data/transformfeedback/transformfeedback.vert"));
glow::Shader::fromFile(gl::GL_VERTEX_SHADER, "data/transformfeedback/transformfeedback.vert"));
m_transformFeedbackProgram->setUniform("deltaT", 0.0f);
}

Expand Down
2 changes: 1 addition & 1 deletion source/examples/ssbo/main.cpp
Expand Up @@ -40,7 +40,7 @@ class EventHandler : public ExampleWindowEventHandler
gl::glClearColor(0.2f, 0.3f, 0.4f, 1.f);


m_quad = new glowutils::ScreenAlignedQuad(glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, "data/ssbo/ssbo.frag"));
m_quad = new glowutils::ScreenAlignedQuad(glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, "data/ssbo/ssbo.frag"));

m_quad->program()->setUniform("maximum", 10);
m_quad->program()->setUniform("rowCount", 10);
Expand Down
12 changes: 6 additions & 6 deletions source/examples/tessellation/main.cpp
Expand Up @@ -59,12 +59,12 @@ class EventHandler : public ExampleWindowEventHandler

m_sphere = new glow::Program();
m_sphere->attach(
glowutils::createShaderFromFile(gl::GL_VERTEX_SHADER, "data/tessellation/sphere.vert")
, glowutils::createShaderFromFile(gl::GL_TESS_CONTROL_SHADER, "data/tessellation/sphere.tcs")
, glowutils::createShaderFromFile(gl::GL_TESS_EVALUATION_SHADER, "data/tessellation/sphere.tes")
, glowutils::createShaderFromFile(gl::GL_GEOMETRY_SHADER, "data/tessellation/sphere.geom")
, glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, "data/tessellation/sphere.frag")
, glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, "data/common/phong.frag"));
glow::Shader::fromFile(gl::GL_VERTEX_SHADER, "data/tessellation/sphere.vert")
, glow::Shader::fromFile(gl::GL_TESS_CONTROL_SHADER, "data/tessellation/sphere.tcs")
, glow::Shader::fromFile(gl::GL_TESS_EVALUATION_SHADER, "data/tessellation/sphere.tes")
, glow::Shader::fromFile(gl::GL_GEOMETRY_SHADER, "data/tessellation/sphere.geom")
, glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, "data/tessellation/sphere.frag")
, glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, "data/common/phong.frag"));

m_icosahedron = new glowutils::Icosahedron();
m_agrid = new glowutils::AdaptiveGrid(16U);
Expand Down
4 changes: 2 additions & 2 deletions source/examples/transparency/ABufferAlgorithm.cpp
Expand Up @@ -42,7 +42,7 @@ void ABufferAlgorithm::initialize(const std::string & transparencyShaderFilePath
glow::NamedString::create("/transparency/abuffer.glsl", new glow::File(transparencyShaderFilePath + "abuffer.glsl"));

m_program = new glow::Program();
m_program->attach(glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "abuffer.frag"));
m_program->attach(glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "abuffer.frag"));
m_program->attach(vertexShader);
if (geometryShader != nullptr) m_program->attach(geometryShader);

Expand All @@ -63,7 +63,7 @@ void ABufferAlgorithm::initialize(const std::string & transparencyShaderFilePath
m_counter = new glow::Buffer();
m_counter->setName("A Buffer Counter");

m_quad = new glowutils::ScreenAlignedQuad(glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "abuffer_post.frag"));
m_quad = new glowutils::ScreenAlignedQuad(glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "abuffer_post.frag"));

m_colorBuffer = createColorTex();
m_postFbo = new glow::FrameBufferObject;
Expand Down
2 changes: 1 addition & 1 deletion source/examples/transparency/GlBlendAlgorithm.cpp
Expand Up @@ -15,7 +15,7 @@ void GlBlendAlgorithm::initialize(const std::string & transparencyShaderFilePath
assert(vertexShader != nullptr);

m_program = new glow::Program();
m_program->attach(glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "glblend.frag"));
m_program->attach(glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "glblend.frag"));
m_program->attach(vertexShader);
if (geometryShader != nullptr) m_program->attach(geometryShader);

Expand Down
10 changes: 5 additions & 5 deletions source/examples/transparency/HybridAlgorithm.cpp
Expand Up @@ -27,20 +27,20 @@ void HybridAlgorithm::initialize(const std::string & transparencyShaderFilePath,

m_opaqueProgram = new glow::Program;
m_opaqueProgram->attach(vertexShader);
m_opaqueProgram->attach(glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "hybrid_opaque.frag"));
m_opaqueProgram->attach(glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "hybrid_opaque.frag"));
if (geometryShader != nullptr) m_opaqueProgram->attach(geometryShader);

m_depthKTabProgram = new glow::Program;
m_depthKTabProgram->attach(vertexShader);
m_depthKTabProgram->attach(glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "hybrid_depthktab.frag"));
m_depthKTabProgram->attach(glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "hybrid_depthktab.frag"));
if (geometryShader != nullptr) m_depthKTabProgram->attach(geometryShader);

m_visibilityKTabProgram = new glow::Program;
m_visibilityKTabProgram->attach(glowutils::createShaderFromFile(gl::GL_COMPUTE_SHADER, transparencyShaderFilePath + "hybrid_visibilityktab.comp"));
m_visibilityKTabProgram->attach(glow::Shader::fromFile(gl::GL_COMPUTE_SHADER, transparencyShaderFilePath + "hybrid_visibilityktab.comp"));

m_colorProgram = new glow::Program;
m_colorProgram->attach(vertexShader);
m_colorProgram->attach(glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "hybrid_color.frag"));
m_colorProgram->attach(glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "hybrid_color.frag"));
if (geometryShader != nullptr) m_colorProgram->attach(geometryShader);

m_depthBuffer = new glow::RenderBufferObject;
Expand All @@ -62,7 +62,7 @@ void HybridAlgorithm::initialize(const std::string & transparencyShaderFilePath,
m_colorFbo->attachRenderBuffer(gl::GL_DEPTH_ATTACHMENT, m_depthBuffer.get());
m_colorFbo->setDrawBuffers({ gl::GL_COLOR_ATTACHMENT0, gl::GL_COLOR_ATTACHMENT1 });

m_compositionQuad = new glowutils::ScreenAlignedQuad(glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "hybrid_post.frag"));
m_compositionQuad = new glowutils::ScreenAlignedQuad(glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "hybrid_post.frag"));
m_compositionFbo = new glow::FrameBufferObject;
m_compositionFbo->attachTexture2D(gl::GL_COLOR_ATTACHMENT0, m_colorBuffer.get());
m_compositionFbo->setDrawBuffer(gl::GL_COLOR_ATTACHMENT0);
Expand Down
6 changes: 3 additions & 3 deletions source/examples/transparency/WeightedAverageAlgorithm.cpp
Expand Up @@ -14,12 +14,12 @@
void WeightedAverageAlgorithm::initialize(const std::string & transparencyShaderFilePath, glow::Shader *vertexShader, glow::Shader *geometryShader) {

m_opaqueProgram = new glow::Program;
m_opaqueProgram->attach(glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "wavg_opaque.frag"));
m_opaqueProgram->attach(glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "wavg_opaque.frag"));
m_opaqueProgram->attach(vertexShader);
if (geometryShader != nullptr) m_opaqueProgram->attach(geometryShader);

m_accumulationProgram = new glow::Program;
m_accumulationProgram->attach(glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "wavg_translucent.frag"));
m_accumulationProgram->attach(glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "wavg_translucent.frag"));
m_accumulationProgram->attach(vertexShader);
if (geometryShader != nullptr) m_accumulationProgram->attach(geometryShader);

Expand All @@ -35,7 +35,7 @@ void WeightedAverageAlgorithm::initialize(const std::string & transparencyShader
m_renderFbo->attachRenderBuffer(gl::GL_DEPTH_ATTACHMENT, m_depthBuffer);
m_renderFbo->setDrawBuffers({ gl::GL_COLOR_ATTACHMENT0, gl::GL_COLOR_ATTACHMENT1 });

m_quad = new glowutils::ScreenAlignedQuad(glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "wavg_post.frag"));
m_quad = new glowutils::ScreenAlignedQuad(glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, transparencyShaderFilePath + "wavg_post.frag"));

m_colorBuffer = createColorTex();
m_postFbo = new glow::FrameBufferObject;
Expand Down
6 changes: 3 additions & 3 deletions source/examples/transparency/main.cpp
Expand Up @@ -60,7 +60,7 @@ class EventHandler : public ExampleWindowEventHandler, glowutils::AbstractCoordi
gl::glClearColor(1.0f, 1.0f, 1.0f, 1.0f);


glow::Shader* vertexShader = glowutils::createShaderFromFile(gl::GL_VERTEX_SHADER, "data/transparency/transparency.vert");
glow::Shader* vertexShader = glow::Shader::fromFile(gl::GL_VERTEX_SHADER, "data/transparency/transparency.vert");

m_algos.push_back(new GlBlendAlgorithm);
m_algos.push_back(new ABufferAlgorithm);
Expand All @@ -76,8 +76,8 @@ class EventHandler : public ExampleWindowEventHandler, glowutils::AbstractCoordi

// Setup the screen aligned quad stuff
glow::Program* quadProgram = new glow::Program();
quadProgram->attach(glowutils::createShaderFromFile(gl::GL_FRAGMENT_SHADER, "data/transparency/quad.frag"));
quadProgram->attach(glowutils::createShaderFromFile(gl::GL_VERTEX_SHADER, "data/transparency/quad.vert"));
quadProgram->attach(glow::Shader::fromFile(gl::GL_FRAGMENT_SHADER, "data/transparency/quad.frag"));
quadProgram->attach(glow::Shader::fromFile(gl::GL_VERTEX_SHADER, "data/transparency/quad.vert"));
m_quad = new glowutils::ScreenAlignedQuad(quadProgram);

m_aabb.extend(glm::vec3(-1.f, -0.5f, -10.5f));
Expand Down
1 change: 1 addition & 0 deletions source/glow/include/glow/Shader.h
Expand Up @@ -40,6 +40,7 @@ class GLOW_API Shader : public Object, protected ChangeListener, public Changeab

public:
static Shader * fromString(const gl::GLenum type, const std::string & sourceString);
static Shader * fromFile(const gl::GLenum type, const std::string & filename);

public:
Shader(const gl::GLenum type);
Expand Down
6 changes: 6 additions & 0 deletions source/glow/source/Shader.cpp
Expand Up @@ -10,6 +10,7 @@
#include <glowbase/Version.h>
#include <glowbase/AbstractStringSource.h>
#include <glowbase/StaticStringSource.h>
#include <glowbase/File.h>

#include <glow/Program.h>
#include <glow/logging.h>
Expand Down Expand Up @@ -68,6 +69,11 @@ Shader * Shader::fromString(const gl::GLenum type, const std::string & sourceStr
return new Shader(type, new StaticStringSource(sourceString));
}

Shader * Shader::fromFile(const gl::GLenum type, const std::string & filename)
{
return new Shader(type, new File(filename));
}

Shader::~Shader()
{
if (m_source)
Expand Down
13 changes: 0 additions & 13 deletions source/glowutils/include/glowutils/glowutils.h
@@ -1,25 +1,12 @@
#pragma once

#include <string>
#include <vector>

#include <glbinding/types.h>

#include <glowutils/glowutils_api.h>

namespace glow
{

class Shader;

}

namespace glowutils
{

GLOWUTILS_API glow::Shader * createShaderFromFile(gl::GLenum type, const std::string & fileName);
GLOWUTILS_API glow::Shader * createShaderFromFile(gl::GLenum type, const std::string & fileName, const std::vector<std::string> & includePaths);

GLOWUTILS_API void scanDirectory(const std::string & directory, const std::string & fileExtension);

} // namespace glowutils
15 changes: 2 additions & 13 deletions source/glowutils/source/glowutils.cpp
@@ -1,10 +1,9 @@
#include <glowutils/glowutils.h>

#include <glowbase/File.h>

#include <glow/logging.h>
#include <glow/NamedString.h>
#include <glow/Shader.h>

#include <glowbase/File.h>

#ifdef _MSC_VER
#include "windows.h"
Expand Down Expand Up @@ -59,16 +58,6 @@ using namespace glow;
namespace glowutils
{

Shader * createShaderFromFile(const gl::GLenum type, const std::string& fileName)
{
return new Shader(type, new File(fileName));
}

Shader * createShaderFromFile(gl::GLenum type, const std::string & fileName, const std::vector<std::string> & includePaths)
{
return new Shader(type, new File(fileName), includePaths);
}

void scanDirectory(const std::string & directory, const std::string & fileExtension)
{
for (const std::string & file: getFiles(directory))
Expand Down

0 comments on commit bac3654

Please sign in to comment.