Skip to content

Commit 38f9c8c

Browse files
committed
Make project nix buildable
1 parent df46de0 commit 38f9c8c

File tree

9 files changed

+111
-39
lines changed

9 files changed

+111
-39
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
game
2+
result
13
bin
24
build
35
*.o

Makefile

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
1-
CFLAGS = -Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion -Wno-float-conversion -Wno-unused-parameter -O2
1+
NAME = cpp-opengl
22

3+
CFLAGS = -Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion -Wno-float-conversion -Wno-unused-parameter -O2
34
LDFLAGS = -lGLEW -lGL -lGLU -lglfw
4-
5-
TARGET = bin/out
5+
PREFIX = /usr/local/$(NAME)
6+
TARGET = game
67
SOURCES = $(wildcard src/*.cpp)
78
OBJS = ${SOURCES:src/%.cpp=build/%.o}
89
DEPS = $(OBJS:.o=.d)
910

11+
define RUNNER :=
12+
cd $(PREFIX)
13+
./$(TARGET)
14+
endef
15+
export RUNNER
16+
1017
all: $(TARGET)
1118

1219
clean:
@@ -27,6 +34,17 @@ $(TARGET): $(OBJS) | bin
2734
build/%.o: src/%.cpp | build
2835
g++ $(CFLAGS) -MMD -MP -c $< -o $@
2936

30-
.PHONY: all clean run
37+
install: $(TARGET)
38+
mkdir -p $(PREFIX)/bin
39+
cp $(TARGET) $(PREFIX)
40+
cp -r shaders $(PREFIX)
41+
cp -r assets $(PREFIX)
42+
@echo "$$RUNNER" > $(PREFIX)/bin/$(NAME)
43+
chmod +x $(PREFIX)/bin/$(NAME)
44+
45+
uninstall:
46+
rm -r $(PREFIX)
47+
48+
.PHONY: all clean run install uninstall
3149

3250
-include $(DEPS)

assets/container2.png

457 KB
Loading

assets/container2_specular.png

141 KB
Loading

flake.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,24 @@
1313
}:
1414
flake-utils.lib.eachDefaultSystem (
1515
system: let
16+
name = "cpp-opengl";
1617
pkgs = nixpkgs.legacyPackages.${system};
18+
buildInputs = with pkgs; [
19+
glfw
20+
glew
21+
stb
22+
glm
23+
];
1724
in {
25+
packages = {
26+
default = pkgs.stdenv.mkDerivation {
27+
src = ./.;
28+
makeFlags = ["PREFIX=$(out)"];
29+
inherit name buildInputs;
30+
};
31+
};
1832
devShells.default = pkgs.mkShell {
19-
buildInputs = with pkgs; [
20-
glfw
21-
glew
22-
stb
23-
glm
24-
];
33+
inherit name buildInputs;
2534
};
2635
}
2736
);

shaders/phong.frag.glsl

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,44 @@ in vec2 TexCoord;
66
in vec3 Normal;
77
in vec3 FragPos;
88

9-
uniform vec3 lightColor;
10-
uniform vec3 objectColor;
11-
uniform vec3 lightPos;
12-
uniform vec3 viewPos;
9+
struct Material {
10+
vec3 ambient;
11+
vec3 diffuse;
12+
sampler2D diffuseMap;
13+
vec3 specular;
14+
float shininess;
15+
};
16+
17+
struct Light {
18+
vec3 position;
19+
vec3 ambient;
20+
vec3 brightness;
21+
};
1322

23+
uniform Material material;
24+
uniform Light light;
25+
26+
uniform vec3 viewPos;
1427
uniform sampler2D texture1;
1528

1629
void main() {
17-
float ambientStrength = 0.1f;
18-
float specularStrength = 0.5f;
19-
vec3 ambient = ambientStrength * lightColor;
30+
// ambient
31+
vec3 ambient = light.ambient * material.ambient *
32+
vec3(texture(material.diffuseMap, TexCoord));
33+
34+
// diffuse
2035
vec3 norm = normalize(Normal);
21-
// from object towards the light source
22-
vec3 lightDir = normalize(lightPos - FragPos);
36+
vec3 lightDir = normalize(light.position - FragPos);
2337
float diff = max(dot(norm, lightDir), 0.0f);
24-
vec3 diffuse = diff * lightColor;
38+
vec3 diffuse =
39+
light.brightness * diff * vec3(texture(material.diffuseMap, TexCoord));
40+
41+
// specular
2542
vec3 viewDir = normalize(viewPos - FragPos);
2643
vec3 reflection = reflect(-lightDir, norm);
27-
float spec = pow(max(dot(viewDir, reflection), 0.0f), 32);
28-
vec3 specular = specularStrength * spec * lightColor;
29-
vec3 final = (ambient + diffuse + specular) * objectColor;
30-
FragColor = vec4(final, 1.0f);
31-
// * texture(texture1, TexCoord);
44+
float spec =
45+
pow(max(dot(viewDir, reflection), 0.0f), material.shininess * 128.0f);
46+
vec3 specular = light.brightness * (spec * material.specular);
47+
48+
FragColor = vec4(ambient + diffuse + specular, 1.0f);
3249
}

src/main.cpp

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -354,28 +354,49 @@ unsigned int createLightsource() {
354354
return VAO;
355355
}
356356

357+
struct Material {
358+
glm::vec3 ambient;
359+
glm::vec3 diffuse;
360+
glm::vec3 specular;
361+
float shininess;
362+
};
363+
357364
int main(void) {
358365
GLFWwindow *window = initOpenGL();
359366

360367
Shader simpleShader("shaders/standard.vert.glsl", "shaders/phong.frag.glsl");
361368
Shader lampShader("shaders/standard.vert.glsl", "shaders/lamp.frag.glsl");
362-
Texture texture("assets/silo2_p2.png", GL_NEAREST, GL_REPEAT);
369+
Texture texture("assets/container2.png", GL_NEAREST, GL_REPEAT);
363370

364371
unsigned int cubeVAO = createCube();
365372
unsigned int lightVAO = createLightsource();
366373

374+
Material gold = {
375+
glm::vec3(0.24725f, 0.1995f, 0.0745f),
376+
glm::vec3(0.75164f, 0.60648f, 0.22648f),
377+
glm::vec3(0.628281f, 0.555802f, 0.366065f),
378+
0.4f,
379+
};
380+
381+
Material crate = {
382+
glm::vec3(0.1f, 0.1f, 0.2f),
383+
glm::vec3(1.0f),
384+
glm::vec3(1.0f),
385+
0.2f,
386+
};
387+
367388
std::vector cubePositions = {
368389
glm::vec3(0.0f, 0.0f, 0.0f),
369390
glm::vec3(1.3f, 0.0f, 0.0f),
370391
glm::vec3(0.0f, 1.3f, 0.0f),
371392
glm::vec3(0.0f, 0.0f, 1.3f),
372393
};
373394

374-
std::vector cubeColors = {
375-
glm::vec3(1.0f, 1.0f, 1.0f),
376-
glm::vec3(1.0f, 0.0f, 0.0f),
377-
glm::vec3(0.0f, 1.0f, 0.0f),
378-
glm::vec3(0.0f, 0.0f, 1.0f),
395+
std::vector cubeMaterials = {
396+
gold,
397+
crate,
398+
crate,
399+
crate,
379400
};
380401

381402
camera.setPosition(glm::vec3(4.0f, 4.0f, 4.0f));
@@ -427,16 +448,21 @@ int main(void) {
427448
simpleShader.setMat4("projection", camera.projection());
428449
simpleShader.setMat4("view", view);
429450

430-
simpleShader.setVec3("lightColor", glm::vec3(1.0f, 1.0f, 1.0f));
431-
simpleShader.setVec3("lightPos", lightPos);
451+
simpleShader.setVec3("light.ambient", glm::vec3(1.0f));
452+
simpleShader.setVec3("light.brightness", glm::vec3(1.0f));
453+
simpleShader.setVec3("light.position", lightPos);
454+
432455
simpleShader.setVec3("viewPos", camera.pos);
433456
glBindVertexArray(cubeVAO);
434457

435458
for (unsigned int i = 0; i < std::size(cubePositions); i++) {
436459
glm::mat4 model = glm::mat4(1.0f);
437460
model = glm::translate(model, cubePositions[i]);
438461
simpleShader.setMat4("model", model);
439-
simpleShader.setVec3("objectColor", cubeColors[i]);
462+
simpleShader.setVec3("material.ambient", cubeMaterials[i].ambient);
463+
simpleShader.setVec3("material.diffuse", cubeMaterials[i].diffuse);
464+
simpleShader.setVec3("material.specular", cubeMaterials[i].specular);
465+
simpleShader.setFloat("material.shininess", cubeMaterials[i].shininess);
440466
glDrawArrays(GL_TRIANGLES, 0, 36);
441467
}
442468

src/shader.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ Shader::Shader(const char *vertexPath, const char *fragmentPath) {
2020

2121
// check for linking errors
2222
int success;
23-
glGetShaderiv(ID, GL_LINK_STATUS, &success);
23+
glGetProgramiv(ID, GL_LINK_STATUS, &success);
2424
if (!success) {
25-
GLchar infoLog[1024];
25+
char infoLog[1024];
2626
glGetProgramInfoLog(ID, 1024, NULL, infoLog);
2727
std::cerr << "ERROR: SHADER LINKING FAILED\n" << infoLog << std::endl;
2828
}

0 commit comments

Comments
 (0)