@@ -37,41 +37,28 @@ sfShader* sfShader_createFromFile(const char* vertexShaderFilename,
3737 const char * geometryShaderFilename,
3838 const char * fragmentShaderFilename)
3939{
40+ // At least one shader must be provided
41+ if (!(vertexShaderFilename || geometryShaderFilename || fragmentShaderFilename))
42+ return nullptr ;
43+
4044 bool success = false ;
4145 auto shader = std::make_unique<sfShader>();
42- if (vertexShaderFilename || geometryShaderFilename || fragmentShaderFilename)
46+
47+ if (!geometryShaderFilename)
4348 {
44- if (!geometryShaderFilename)
45- {
46- if (!vertexShaderFilename)
47- {
48- // fragment shader only
49- success = shader->loadFromFile (fragmentShaderFilename, sf::Shader::Type::Fragment);
50- }
51- else if (!fragmentShaderFilename)
52- {
53- // vertex shader only
54- success = shader->loadFromFile (vertexShaderFilename, sf::Shader::Type::Vertex);
55- }
56- else
57- {
58- // vertex + fragment shaders
59- success = shader->loadFromFile (vertexShaderFilename, fragmentShaderFilename);
60- }
61- }
62- else
63- {
64- if (!vertexShaderFilename && !fragmentShaderFilename)
65- {
66- // geometry shader only
67- success = shader->loadFromFile (geometryShaderFilename, sf::Shader::Type::Geometry);
68- }
69- else
70- {
71- // vertex + geometry + fragment shaders
72- success = shader->loadFromFile (vertexShaderFilename, geometryShaderFilename, fragmentShaderFilename);
73- }
74- }
49+ if (!vertexShaderFilename) // fragment shader only
50+ success = shader->loadFromFile (fragmentShaderFilename, sf::Shader::Type::Fragment);
51+ else if (!fragmentShaderFilename) // vertex shader only
52+ success = shader->loadFromFile (vertexShaderFilename, sf::Shader::Type::Vertex);
53+ else // vertex + fragment shaders
54+ success = shader->loadFromFile (vertexShaderFilename, fragmentShaderFilename);
55+ }
56+ else
57+ {
58+ if (!vertexShaderFilename && !fragmentShaderFilename) // geometry shader only
59+ success = shader->loadFromFile (geometryShaderFilename, sf::Shader::Type::Geometry);
60+ else // vertex + geometry + fragment shaders
61+ success = shader->loadFromFile (vertexShaderFilename, geometryShaderFilename, fragmentShaderFilename);
7562 }
7663
7764 if (!success)
@@ -84,41 +71,28 @@ sfShader* sfShader_createFromFile(const char* vertexShaderFilename,
8471// //////////////////////////////////////////////////////////
8572sfShader* sfShader_createFromMemory (const char * vertexShader, const char * geometryShader, const char * fragmentShader)
8673{
74+ // At least one shader must be provided
75+ if (!(vertexShader || geometryShader || fragmentShader))
76+ return nullptr ;
77+
8778 bool success = false ;
8879 auto shader = std::make_unique<sfShader>();
89- if (vertexShader || geometryShader || fragmentShader)
80+
81+ if (!geometryShader)
9082 {
91- if (!geometryShader)
92- {
93- if (!vertexShader)
94- {
95- // fragment shader only
96- success = shader->loadFromMemory (fragmentShader, sf::Shader::Type::Fragment);
97- }
98- else if (!fragmentShader)
99- {
100- // vertex shader only
101- success = shader->loadFromMemory (vertexShader, sf::Shader::Type::Vertex);
102- }
103- else
104- {
105- // vertex + fragment shaders
106- success = shader->loadFromMemory (vertexShader, fragmentShader);
107- }
108- }
109- else
110- {
111- if (!vertexShader && !fragmentShader)
112- {
113- // geometry shader only
114- success = shader->loadFromMemory (geometryShader, sf::Shader::Type::Geometry);
115- }
116- else
117- {
118- // vertex + geometry + fragment shaders
119- success = shader->loadFromMemory (vertexShader, geometryShader, fragmentShader);
120- }
121- }
83+ if (!vertexShader) // fragment shader only
84+ success = shader->loadFromMemory (fragmentShader, sf::Shader::Type::Fragment);
85+ else if (!fragmentShader) // vertex shader only
86+ success = shader->loadFromMemory (vertexShader, sf::Shader::Type::Vertex);
87+ else // vertex + fragment shaders
88+ success = shader->loadFromMemory (vertexShader, fragmentShader);
89+ }
90+ else
91+ {
92+ if (!vertexShader && !fragmentShader) // geometry shader only
93+ success = shader->loadFromMemory (geometryShader, sf::Shader::Type::Geometry);
94+ else // vertex + geometry + fragment shaders
95+ success = shader->loadFromMemory (vertexShader, geometryShader, fragmentShader);
12296 }
12397
12498 if (!success)
@@ -133,47 +107,44 @@ sfShader* sfShader_createFromStream(sfInputStream* vertexShaderStream,
133107 sfInputStream* geometryShaderStream,
134108 sfInputStream* fragmentShaderStream)
135109{
110+ // At least one shader must be provided
111+ if (!(vertexShaderStream || geometryShaderStream || fragmentShaderStream))
112+ return nullptr ;
113+
136114 bool success = false ;
137115 auto shader = std::make_unique<sfShader>();
138- if (vertexShaderStream || geometryShaderStream || fragmentShaderStream)
116+
117+ if (!geometryShaderStream)
118+ {
119+ if (!vertexShaderStream) // fragment shader only
120+ {
121+ CallbackStream stream (fragmentShaderStream);
122+ success = shader->loadFromStream (stream, sf::Shader::Type::Fragment);
123+ }
124+ else if (!fragmentShaderStream) // vertex shader only
125+ {
126+ CallbackStream stream (vertexShaderStream);
127+ success = shader->loadFromStream (stream, sf::Shader::Type::Vertex);
128+ }
129+ else // vertex + fragment shaders
130+ {
131+ CallbackStream vertexStream (vertexShaderStream);
132+ CallbackStream fragmentStream (fragmentShaderStream);
133+ success = shader->loadFromStream (vertexStream, fragmentStream);
134+ }
135+ }
136+ else
139137 {
140- if (!geometryShaderStream)
138+ CallbackStream geometryStream (geometryShaderStream);
139+ if (!vertexShaderStream && !fragmentShaderStream) // geometry shader only
141140 {
142- if (!vertexShaderStream)
143- {
144- // fragment shader only
145- CallbackStream stream (fragmentShaderStream);
146- success = shader->loadFromStream (stream, sf::Shader::Type::Fragment);
147- }
148- else if (!fragmentShaderStream)
149- {
150- // vertex shader only
151- CallbackStream stream (vertexShaderStream);
152- success = shader->loadFromStream (stream, sf::Shader::Type::Vertex);
153- }
154- else
155- {
156- // vertex + fragment shaders
157- CallbackStream vertexStream (vertexShaderStream);
158- CallbackStream fragmentStream (fragmentShaderStream);
159- success = shader->loadFromStream (vertexStream, fragmentStream);
160- }
141+ success = shader->loadFromStream (geometryStream, sf::Shader::Type::Geometry);
161142 }
162- else
143+ else // vertex + geometry + fragment shaders
163144 {
164- CallbackStream geometryStream (geometryShaderStream);
165- if (!vertexShaderStream && !fragmentShaderStream)
166- {
167- // geometry shader only
168- success = shader->loadFromStream (geometryStream, sf::Shader::Type::Geometry);
169- }
170- else
171- {
172- // vertex + geometry + fragment shaders
173- CallbackStream vertexStream (vertexShaderStream);
174- CallbackStream fragmentStream (fragmentShaderStream);
175- success = shader->loadFromStream (vertexStream, geometryStream, fragmentStream);
176- }
145+ CallbackStream vertexStream (vertexShaderStream);
146+ CallbackStream fragmentStream (fragmentShaderStream);
147+ success = shader->loadFromStream (vertexStream, geometryStream, fragmentStream);
177148 }
178149 }
179150
0 commit comments