initial commit
commit
afe2aa5277
|
@ -0,0 +1,2 @@
|
||||||
|
*.kdev*
|
||||||
|
build/*
|
|
@ -0,0 +1,49 @@
|
||||||
|
cmake_minimum_required(VERSION 2.4)
|
||||||
|
|
||||||
|
if(COMMAND cmake_policy)
|
||||||
|
cmake_policy(SET CMP0003 NEW)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(PROJ_NAME fxt)
|
||||||
|
set(SRC .)
|
||||||
|
|
||||||
|
project(${PROJ_NAME})
|
||||||
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR})
|
||||||
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMake")
|
||||||
|
|
||||||
|
find_package(SDL2 REQUIRED)
|
||||||
|
find_package(OpenGL REQUIRED)
|
||||||
|
|
||||||
|
if(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MT /Oy /Oi /W3 /FAcs /GF /fp:fast /wd4996 /D_CRT_SECURE_NO_DEPRECATE")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MT /Oy /Oi /W3 /FAcs /GF /fp:fast /wd4996 /D_CRT_SECURE_NO_DEPRECATE")
|
||||||
|
add_definitions(-DHAVE_FAST_MATH)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffast-math")
|
||||||
|
set(MATHLIB m)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(MINGW)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++ -static-libgcc")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static-libstdc++ -static-libgcc")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
${SRC}
|
||||||
|
${SDL2_INCLUDE_DIRS}
|
||||||
|
${OPENGL_INCLUDE_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
add_executable(${PROJ_NAME} WIN32
|
||||||
|
${SRC}/main.c
|
||||||
|
${SRC}/gl_core_3_3.c
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJ_NAME}
|
||||||
|
${SDL2_LIBRARIES}
|
||||||
|
${MATHLIB}
|
||||||
|
${OPENGL_LIBRARIES}
|
||||||
|
)
|
|
@ -0,0 +1,41 @@
|
||||||
|
SET(SDL2_SEARCH_PATHS
|
||||||
|
~/Library/Frameworks
|
||||||
|
/Library/Frameworks
|
||||||
|
/usr/local
|
||||||
|
/usr
|
||||||
|
/sw
|
||||||
|
/opt/local
|
||||||
|
/opt/csw
|
||||||
|
/opt
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_PATH(SDL2_INCLUDE_DIRS SDL.h
|
||||||
|
HINTS
|
||||||
|
$ENV{SDL2DIR}
|
||||||
|
PATH_SUFFIXES include/SDL2 include
|
||||||
|
PATHS ${SDL2_SEARCH_PATHS}
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_LIBRARY(SDL2_LIBRARIES
|
||||||
|
NAMES SDL2
|
||||||
|
HINTS
|
||||||
|
$ENV{SDL2DIR}
|
||||||
|
PATH_SUFFIXES lib64 lib
|
||||||
|
PATHS ${SDL2_SEARCH_PATHS}
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_LIBRARY(SDL2MAIN_LIBRARIES
|
||||||
|
NAMES SDL2main
|
||||||
|
HINTS
|
||||||
|
$ENV{SDL2DIR}
|
||||||
|
PATH_SUFFIXES lib64 lib
|
||||||
|
PATHS ${SDL2_SEARCH_PATHS}
|
||||||
|
)
|
||||||
|
|
||||||
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARIES SDL2_INCLUDE_DIRS)
|
||||||
|
|
||||||
|
SET(SDL2_FOUND "NO")
|
||||||
|
IF(SDL2_LIBRARIES AND SDL2_INCLUDE_DIRS)
|
||||||
|
SET(SDL2_FOUND "YES")
|
||||||
|
ENDIF(SDL2_LIBRARIES AND SDL2_INCLUDE_DIRS)
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,201 @@
|
||||||
|
#include "gl_core_3_3.h"
|
||||||
|
#include "SDL.h"
|
||||||
|
#include "SDL_opengl.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
struct renderinfo
|
||||||
|
{
|
||||||
|
int ScrW;
|
||||||
|
int ScrH;
|
||||||
|
|
||||||
|
SDL_Window *Window;
|
||||||
|
SDL_Renderer *Renderer;
|
||||||
|
SDL_GLContext Context;
|
||||||
|
|
||||||
|
GLuint VertShader;
|
||||||
|
GLuint FragShader;
|
||||||
|
GLuint Program;
|
||||||
|
|
||||||
|
GLuint VBO;
|
||||||
|
GLuint EBO;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
GLint Position;
|
||||||
|
} Attrib;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
GLint Ticks;
|
||||||
|
} Uniform;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct renderinfo re;
|
||||||
|
|
||||||
|
GLuint R_CreateBuffer(GLenum type, void const *data, GLsizei size)
|
||||||
|
{
|
||||||
|
GLuint buffer;
|
||||||
|
glGenBuffers(1, &buffer);
|
||||||
|
glBindBuffer(type, buffer);
|
||||||
|
glBufferData(type, size, data, GL_STATIC_DRAW);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLuint R_CreateShader(GLenum type, char const *src)
|
||||||
|
{
|
||||||
|
char log[512];
|
||||||
|
GLint success;
|
||||||
|
GLuint shader;
|
||||||
|
|
||||||
|
shader = glCreateShader(type);
|
||||||
|
glShaderSource(shader, 1, &src, NULL);
|
||||||
|
glCompileShader(shader);
|
||||||
|
glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
|
||||||
|
|
||||||
|
if(!success)
|
||||||
|
{
|
||||||
|
glGetShaderInfoLog(shader, 512, NULL, log);
|
||||||
|
printf("Shader compile failed: %s\n", log);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return shader;
|
||||||
|
}
|
||||||
|
|
||||||
|
char const *FXT_ReadFile(char const *fname)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
char *buf;
|
||||||
|
size_t size;
|
||||||
|
|
||||||
|
fp = fopen(fname, "r");
|
||||||
|
buf = malloc(4096);
|
||||||
|
size = fread(buf, 1, 4096, fp);
|
||||||
|
buf[size] = '\0';
|
||||||
|
|
||||||
|
return realloc(buf, size + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void R_InitGL()
|
||||||
|
{
|
||||||
|
GLfloat const vertices[] = {
|
||||||
|
-1.0, -1.0,
|
||||||
|
1.0, -1.0,
|
||||||
|
-1.0, 1.0,
|
||||||
|
1.0, 1.0
|
||||||
|
};
|
||||||
|
|
||||||
|
GLushort const indices[] = { 0, 1, 2, 3 };
|
||||||
|
|
||||||
|
// Init viewport.
|
||||||
|
glViewport(0, 0, re.ScrW, re.ScrH);
|
||||||
|
glClearColor(0.2, 0.3, 0.3, 1.0);
|
||||||
|
|
||||||
|
// Init buffers.
|
||||||
|
re.VBO = R_CreateBuffer(GL_ARRAY_BUFFER, vertices, sizeof(vertices));
|
||||||
|
re.EBO = R_CreateBuffer(GL_ELEMENT_ARRAY_BUFFER, indices, sizeof(indices));
|
||||||
|
|
||||||
|
// Init shaders.
|
||||||
|
re.VertShader = R_CreateShader(GL_VERTEX_SHADER, FXT_ReadFile("main.vp.glsl"));
|
||||||
|
re.FragShader = R_CreateShader(GL_FRAGMENT_SHADER, FXT_ReadFile("main.fp.glsl"));
|
||||||
|
|
||||||
|
re.Program = glCreateProgram();
|
||||||
|
glAttachShader(re.Program, re.VertShader);
|
||||||
|
glAttachShader(re.Program, re.FragShader);
|
||||||
|
glLinkProgram(re.Program);
|
||||||
|
|
||||||
|
// Init uniform and attribute locations.
|
||||||
|
|
||||||
|
re.Uniform.Ticks = glGetUniformLocation(re.Program, "Ticks");
|
||||||
|
re.Attrib.Position = glGetAttribLocation(re.Program, "Position");
|
||||||
|
}
|
||||||
|
|
||||||
|
void R_Quit()
|
||||||
|
{
|
||||||
|
// Delete GL bound stuff.
|
||||||
|
glDeleteShader(re.VertShader);
|
||||||
|
glDeleteShader(re.FragShader);
|
||||||
|
glDeleteProgram(re.Program);
|
||||||
|
glDeleteBuffers(1, &re.VBO);
|
||||||
|
|
||||||
|
// Delete SDL bound stuff.
|
||||||
|
SDL_DestroyWindow(re.Window);
|
||||||
|
SDL_Quit();
|
||||||
|
}
|
||||||
|
|
||||||
|
void R_Init()
|
||||||
|
{
|
||||||
|
re.ScrW = 640;
|
||||||
|
re.ScrH = 480;
|
||||||
|
|
||||||
|
// Init GL info.
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
||||||
|
|
||||||
|
// Init window.
|
||||||
|
SDL_CreateWindowAndRenderer(re.ScrW, re.ScrH, SDL_WINDOW_SHOWN, &re.Window, &re.Renderer);
|
||||||
|
|
||||||
|
// Init GL context.
|
||||||
|
re.Context = SDL_GL_CreateContext(re.Window);
|
||||||
|
ogl_LoadFunctions();
|
||||||
|
SDL_GL_SetSwapInterval(1);
|
||||||
|
|
||||||
|
R_InitGL();
|
||||||
|
|
||||||
|
atexit(R_Quit);
|
||||||
|
}
|
||||||
|
|
||||||
|
void R_Main()
|
||||||
|
{
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
// Bind shader.
|
||||||
|
glUseProgram(re.Program);
|
||||||
|
|
||||||
|
// Send uniforms.
|
||||||
|
glUniform1i(re.Uniform.Ticks, SDL_GetTicks());
|
||||||
|
|
||||||
|
// Bind vertex buffer.
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, re.VBO);
|
||||||
|
glVertexAttribPointer(re.Attrib.Position, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 2, NULL);
|
||||||
|
glEnableVertexAttribArray(re.Attrib.Position);
|
||||||
|
|
||||||
|
// Bind element buffer, draw.
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, re.EBO);
|
||||||
|
glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_SHORT, NULL);
|
||||||
|
|
||||||
|
// Disable vertex buffer.
|
||||||
|
glDisableVertexAttribArray(re.Attrib.Position);
|
||||||
|
|
||||||
|
// Swap video buffer (send to screen).
|
||||||
|
SDL_GL_SwapWindow(re.Window);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, INT nCmdShow)
|
||||||
|
#else
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
SDL_Event ev;
|
||||||
|
|
||||||
|
SDL_Init(SDL_INIT_EVERYTHING);
|
||||||
|
R_Init();
|
||||||
|
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
while(SDL_PollEvent(&ev) != 0)
|
||||||
|
{
|
||||||
|
if(ev.type == SDL_QUIT)
|
||||||
|
{
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
R_Main();
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue