Implemented textures
This commit is contained in:
@@ -10,5 +10,6 @@ find_package(glfw3 CONFIG REQUIRED)
|
|||||||
find_package(glm CONFIG REQUIRED)
|
find_package(glm CONFIG REQUIRED)
|
||||||
|
|
||||||
add_subdirectory(./source/app)
|
add_subdirectory(./source/app)
|
||||||
|
add_subdirectory(./source/image)
|
||||||
add_subdirectory(./source/log)
|
add_subdirectory(./source/log)
|
||||||
add_subdirectory(./source/shader)
|
add_subdirectory(./source/shader)
|
||||||
|
|||||||
@@ -1,8 +1,24 @@
|
|||||||
#version 150 core
|
#version 150 core
|
||||||
|
|
||||||
in vec3 _color;
|
uniform sampler2D tex;
|
||||||
out vec4 color;
|
uniform float time;
|
||||||
|
|
||||||
|
in vec3 color;
|
||||||
|
in vec2 coord;
|
||||||
|
|
||||||
|
out vec4 outColor;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
color = vec4(_color, 1.0);
|
vec2 sampleCoord;
|
||||||
|
|
||||||
|
if(coord.y < 0.75) {
|
||||||
|
sampleCoord = coord;
|
||||||
|
} else {
|
||||||
|
sampleCoord = vec2(
|
||||||
|
coord.x + 0.025 * sin(time * 1.5 + coord.y * 80.0),
|
||||||
|
(1.0 - coord.y) * 3
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
outColor = texture(tex, sampleCoord) * vec4(color, 1.0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
#version 150 core
|
#version 150 core
|
||||||
|
|
||||||
in vec2 position;
|
in vec2 inPos;
|
||||||
in vec3 color;
|
in vec3 inColor;
|
||||||
out vec3 _color;
|
in vec2 inCoord;
|
||||||
|
|
||||||
|
out vec3 color;
|
||||||
|
out vec2 coord;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
_color = color;
|
color = inColor;
|
||||||
gl_Position = vec4(position, 0.0, 1.0);
|
coord = inCoord;
|
||||||
|
gl_Position = vec4(inPos, 0.0, 1.0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
project(UglyMain)
|
project(UglyMain)
|
||||||
|
|
||||||
add_executable(${PROJECT_NAME}
|
add_executable(${PROJECT_NAME}
|
||||||
main.cpp
|
./main.cpp
|
||||||
src/App.cpp
|
./src/App.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(${PROJECT_NAME}
|
target_include_directories(${PROJECT_NAME}
|
||||||
@@ -13,6 +13,7 @@ target_link_libraries(${PROJECT_NAME}
|
|||||||
GLEW::GLEW
|
GLEW::GLEW
|
||||||
glfw
|
glfw
|
||||||
glm::glm
|
glm::glm
|
||||||
|
stb_image
|
||||||
UglyLogLib
|
UglyLogLib
|
||||||
UglyShaderLib
|
UglyShaderLib
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include "LogUtils.hpp"
|
#include "LogUtils.hpp"
|
||||||
#include "ShaderProgramBuilder.hpp"
|
#include "ShaderProgramBuilder.hpp"
|
||||||
|
#include "stb_image.h"
|
||||||
#include "TimestampLog.hpp"
|
#include "TimestampLog.hpp"
|
||||||
|
|
||||||
namespace ugly {
|
namespace ugly {
|
||||||
@@ -58,9 +59,14 @@ App::App(GLFWwindow *window):
|
|||||||
glfwSetKeyCallback(mpWindow, key_callback_s);
|
glfwSetKeyCallback(mpWindow, key_callback_s);
|
||||||
|
|
||||||
float vertices[] = {
|
float vertices[] = {
|
||||||
.0f, .5f, 1.f, 0.f, 0.f,
|
// Position(3), Color(2), TexCoord(2)
|
||||||
.5f, -.5f, 0.f, 1.f, 0.f,
|
-0.75f, 0.75f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, // Top-left
|
||||||
-.5f, -.5f, 0.f, 0.f, 1.f
|
0.75f, 0.75f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // Top-right
|
||||||
|
0.75f, -0.75f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, // Bottom-right
|
||||||
|
|
||||||
|
0.75f, -0.75f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, // Bottom-right
|
||||||
|
-0.75f, -0.75f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, // Bottom-left
|
||||||
|
-0.75f, 0.75f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f // Top-left
|
||||||
};
|
};
|
||||||
|
|
||||||
GLuint vbo;
|
GLuint vbo;
|
||||||
@@ -73,23 +79,46 @@ App::App(GLFWwindow *window):
|
|||||||
.attachFromFile(GL_FRAGMENT_SHADER, "assets/shaders/shader.frag")
|
.attachFromFile(GL_FRAGMENT_SHADER, "assets/shaders/shader.frag")
|
||||||
.link();
|
.link();
|
||||||
glUseProgram(shaderProgram);
|
glUseProgram(shaderProgram);
|
||||||
|
mShaderProgram = shaderProgram;
|
||||||
|
|
||||||
|
GLuint tex;
|
||||||
|
glGenTextures(1, &tex);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, tex);
|
||||||
|
int x, y, n;
|
||||||
|
auto data = stbi_load("assets/textures/bliss.jpg", &x, &y, &n, 3);
|
||||||
|
if(data == nullptr) {
|
||||||
|
log("stbi_load() failed!");
|
||||||
|
}
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, x, y, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
|
||||||
|
glGenerateMipmap(GL_TEXTURE_2D);
|
||||||
|
stbi_image_free(data);
|
||||||
|
|
||||||
GLuint vao;
|
GLuint vao;
|
||||||
glGenVertexArrays(1, &vao);
|
glGenVertexArrays(1, &vao);
|
||||||
glBindVertexArray(vao);
|
glBindVertexArray(vao);
|
||||||
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 5*sizeof(float), 0);
|
|
||||||
glEnableVertexAttribArray(0);
|
GLint posAttrib = glGetAttribLocation(shaderProgram, "inPos");
|
||||||
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 5*sizeof(float), (void*)(2*sizeof(float)));
|
GLint colorAttrib = glGetAttribLocation(shaderProgram, "inColor");
|
||||||
glEnableVertexAttribArray(1);
|
GLint coordAttrib = glGetAttribLocation(shaderProgram, "inCoord");
|
||||||
|
glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 7*sizeof(float), 0);
|
||||||
|
glVertexAttribPointer(colorAttrib, 3, GL_FLOAT, GL_FALSE, 7*sizeof(float), (void*)(2*sizeof(float)));
|
||||||
|
glVertexAttribPointer(coordAttrib, 2, GL_FLOAT, GL_FALSE, 7*sizeof(float), (void*)(5*sizeof(float)));
|
||||||
|
glEnableVertexAttribArray(posAttrib);
|
||||||
|
glEnableVertexAttribArray(colorAttrib);
|
||||||
|
glEnableVertexAttribArray(coordAttrib);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void App::game_loop() {
|
void App::game_loop() {
|
||||||
|
GLint timeUniform = glGetUniformLocation(mShaderProgram, "time");
|
||||||
|
|
||||||
|
auto startTime = glfwGetTime();
|
||||||
while(!glfwWindowShouldClose(mpWindow)) {
|
while(!glfwWindowShouldClose(mpWindow)) {
|
||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
|
|
||||||
|
glUniform1f(timeUniform, glfwGetTime() - startTime);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
glDrawArrays(GL_TRIANGLES, 0, 3);
|
glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||||
|
|
||||||
glfwSwapBuffers(mpWindow);
|
glfwSwapBuffers(mpWindow);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ private:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
GLFWwindow *mpWindow;
|
GLFWwindow *mpWindow;
|
||||||
|
unsigned int mShaderProgram;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
App(GLFWwindow *window);
|
App(GLFWwindow *window);
|
||||||
|
|||||||
9
source/image/CMakeLists.txt
Normal file
9
source/image/CMakeLists.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
project(stb_image)
|
||||||
|
|
||||||
|
add_library(${PROJECT_NAME}
|
||||||
|
./src/stb_image.c
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
|
PUBLIC ./include
|
||||||
|
)
|
||||||
37
source/image/LICENSE.txt
Normal file
37
source/image/LICENSE.txt
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
This software is available under 2 licenses -- choose whichever you prefer.
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
ALTERNATIVE A - MIT License
|
||||||
|
Copyright (c) 2017 Sean Barrett
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
so, subject to the following conditions:
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||||
|
This is free and unencumbered software released into the public domain.
|
||||||
|
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||||
|
software, either in source code form or as a compiled binary, for any purpose,
|
||||||
|
commercial or non-commercial, and by any means.
|
||||||
|
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||||
|
software dedicate any and all copyright interest in the software to the public
|
||||||
|
domain. We make this dedication for the benefit of the public at large and to
|
||||||
|
the detriment of our heirs and successors. We intend this dedication to be an
|
||||||
|
overt act of relinquishment in perpetuity of all present and future rights to
|
||||||
|
this software under copyright law.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||||
|
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
7988
source/image/include/stb_image.h
Normal file
7988
source/image/include/stb_image.h
Normal file
File diff suppressed because it is too large
Load Diff
2
source/image/src/stb_image.c
Normal file
2
source/image/src/stb_image.c
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
#define STB_IMAGE_IMPLEMENTATION
|
||||||
|
#include "stb_image.h"
|
||||||
Reference in New Issue
Block a user