mirror of
https://github.com/Kaehvaman/OAIP.git
synced 2025-01-18 16:49:11 +04:00
opengl33 -> opengl43 | нормальный HiDPI !!!!
This commit is contained in:
parent
3b3bf34b74
commit
7eefa8c1fd
@ -139,6 +139,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\src\main.c" />
|
<ClCompile Include="..\src\main.c" />
|
||||||
|
<ClCompile Include="..\src\tinyfiledialogs.c" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
@ -29,5 +29,8 @@
|
|||||||
<ClCompile Include="..\src\main.c">
|
<ClCompile Include="..\src\main.c">
|
||||||
<Filter>Исходные файлы</Filter>
|
<Filter>Исходные файлы</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\tinyfiledialogs.c">
|
||||||
|
<Filter>Исходные файлы</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
@ -2,9 +2,11 @@
|
|||||||
#include "raymath.h"
|
#include "raymath.h"
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <iso646.h>
|
#include <iso646.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#define MAP_X 20
|
#define MAP_X 100
|
||||||
#define MAP_Y 20
|
#define MAP_Y 50
|
||||||
#define CELL_SIZE 20
|
#define CELL_SIZE 20
|
||||||
#define FCELL_SIZE (float)CELL_SIZE
|
#define FCELL_SIZE (float)CELL_SIZE
|
||||||
|
|
||||||
@ -19,11 +21,11 @@ static bool map[MAP_X][MAP_Y] = { 0 };
|
|||||||
static bool tempMap[MAP_X][MAP_Y] = { 0 };
|
static bool tempMap[MAP_X][MAP_Y] = { 0 };
|
||||||
|
|
||||||
static inline int checkCell(int x, int y) {
|
static inline int checkCell(int x, int y) {
|
||||||
if (x > 0 and y > 0 and x < MAP_X - 1 and y < MAP_Y - 1) {
|
if (x < 0 or y < 0 or x > MAP_X - 1 or y > MAP_Y - 1) {
|
||||||
return map[x][y];
|
return 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return 0;
|
return map[x][y];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,39 +47,40 @@ void celluralAutomata()
|
|||||||
if (neighbours == 3) {
|
if (neighbours == 3) {
|
||||||
tempMap[x][y] = true;
|
tempMap[x][y] = true;
|
||||||
}
|
}
|
||||||
else if (neighbours < 2 or neighbours > 3) {
|
else if (neighbours == 2) {
|
||||||
tempMap[x][y] = false;
|
tempMap[x][y] = map[x][y];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
tempMap[x][y] = map[x][y];
|
tempMap[x][y] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int x = 0; x < MAP_X; x++) {
|
memcpy(map, tempMap, MAP_X * MAP_Y * sizeof(bool));
|
||||||
for (int y = 0; y < MAP_Y; y++) {
|
|
||||||
map[x][y] = tempMap[x][y];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawMap()
|
void drawMap()
|
||||||
{
|
{
|
||||||
for (int x = 0; x < MAP_X; x++) {
|
for (int x = 0; x < MAP_X; x++) {
|
||||||
for (int y = 0; y < MAP_Y; y++) {
|
for (int y = 0; y < MAP_Y; y++) {
|
||||||
|
if (map[x][y]) {
|
||||||
int posX = x * CELL_SIZE;
|
int posX = x * CELL_SIZE;
|
||||||
int posY = y * CELL_SIZE;
|
int posY = y * CELL_SIZE;
|
||||||
|
DrawRectangle(posX, posY, CELL_SIZE, CELL_SIZE, BLACK);
|
||||||
Color color;
|
|
||||||
if (map[x][y]) {
|
|
||||||
color = BLACK;
|
|
||||||
}
|
}
|
||||||
else {
|
}
|
||||||
color = RAYWHITE;
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawNet() {
|
||||||
|
for (int i = 0; i <= MAP_X * CELL_SIZE; i += CELL_SIZE) {
|
||||||
|
DrawLine(i, 0, i, MAP_Y * CELL_SIZE, GRAY);
|
||||||
|
DrawLine(i+1, 0, i+1, MAP_Y * CELL_SIZE, GRAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawRectangle(posX, posY, CELL_SIZE, CELL_SIZE, color);
|
for (int i = 0; i <= MAP_Y * CELL_SIZE; i += CELL_SIZE) {
|
||||||
}
|
DrawLine(0, i, MAP_X * CELL_SIZE, i, GRAY);
|
||||||
|
DrawLine(0, i-1, MAP_X * CELL_SIZE, i-1, GRAY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,21 +94,27 @@ int main()
|
|||||||
const int screenWidth = MAP_X * CELL_SIZE;
|
const int screenWidth = MAP_X * CELL_SIZE;
|
||||||
const int screenHeight = MAP_Y * CELL_SIZE + BOTTOM_BAR_HEIGHT;
|
const int screenHeight = MAP_Y * CELL_SIZE + BOTTOM_BAR_HEIGHT;
|
||||||
|
|
||||||
|
SetConfigFlags(FLAG_VSYNC_HINT);
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "Game of Life");
|
InitWindow(screenWidth, screenHeight, "Game of Life");
|
||||||
|
|
||||||
SetTargetFPS(15);
|
//SetTargetFPS(60);
|
||||||
|
|
||||||
Vector2 mousePos = { 0 };
|
Vector2 mousePos = { 0 };
|
||||||
int mouseCellX = 0;
|
int mouseCellX = 0;
|
||||||
int mouseCellY = 0;
|
int mouseCellY = 0;
|
||||||
|
|
||||||
bool editMap = true;
|
bool editMap = true;
|
||||||
|
bool netToggle = false;
|
||||||
|
|
||||||
while (!WindowShouldClose())
|
while (!WindowShouldClose())
|
||||||
{
|
{
|
||||||
if (IsKeyPressed(KEY_SPACE)) {
|
if (IsKeyPressed(KEY_SPACE)) {
|
||||||
editMap = !editMap;
|
editMap = !editMap;
|
||||||
}
|
}
|
||||||
|
if (IsKeyPressed(KEY_N)) {
|
||||||
|
netToggle = !netToggle;
|
||||||
|
}
|
||||||
|
|
||||||
if (editMap)
|
if (editMap)
|
||||||
{
|
{
|
||||||
@ -130,17 +139,22 @@ int main()
|
|||||||
drawMap();
|
drawMap();
|
||||||
drawBottomBar();
|
drawBottomBar();
|
||||||
|
|
||||||
|
if (netToggle) drawNet();
|
||||||
|
|
||||||
if (editMap)
|
if (editMap)
|
||||||
{
|
{
|
||||||
Rectangle rec = {
|
Rectangle rec = {
|
||||||
mouseCellX * CELL_SIZE,
|
mouseCellX * FCELL_SIZE,
|
||||||
mouseCellY * CELL_SIZE,
|
mouseCellY * FCELL_SIZE,
|
||||||
FCELL_SIZE, FCELL_SIZE
|
FCELL_SIZE, FCELL_SIZE
|
||||||
};
|
};
|
||||||
|
|
||||||
DrawRectangleLinesEx(rec, 2, GREEN);
|
DrawRectangleLinesEx(rec, 2, GREEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DrawFPS(0, 0);
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
8171
Game of Life/src/tinyfiledialogs.c
Normal file
8171
Game of Life/src/tinyfiledialogs.c
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -1,40 +0,0 @@
|
|||||||
#version 330
|
|
||||||
|
|
||||||
// Input vertex attributes (from vertex shader)
|
|
||||||
in vec2 fragTexCoord;
|
|
||||||
in vec4 fragColor;
|
|
||||||
|
|
||||||
// Input uniform values
|
|
||||||
uniform sampler2D texture0;
|
|
||||||
uniform vec4 colDiffuse;
|
|
||||||
|
|
||||||
// Output fragment color
|
|
||||||
out vec4 finalColor;
|
|
||||||
|
|
||||||
// NOTE: Add here your custom variables
|
|
||||||
|
|
||||||
const vec2 size = vec2(800, 450); // Framebuffer size
|
|
||||||
const float samples = 5.0; // Pixels per axis; higher = bigger glow, worse performance
|
|
||||||
const float quality = 2.5; // Defines size factor: Lower = smaller glow, better quality
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
vec4 sum = vec4(0);
|
|
||||||
vec2 sizeFactor = vec2(1)/size*quality;
|
|
||||||
|
|
||||||
// Texel color fetching from texture sampler
|
|
||||||
vec4 source = texture(texture0, fragTexCoord);
|
|
||||||
|
|
||||||
const int range = 2; // should be = (samples - 1)/2;
|
|
||||||
|
|
||||||
for (int x = -range; x <= range; x++)
|
|
||||||
{
|
|
||||||
for (int y = -range; y <= range; y++)
|
|
||||||
{
|
|
||||||
sum += texture(texture0, fragTexCoord + vec2(x, y)*sizeFactor);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Calculate final fragment color
|
|
||||||
finalColor = ((sum/(samples*samples)) + source)*colDiffuse;
|
|
||||||
}
|
|
@ -1,27 +0,0 @@
|
|||||||
#version 330
|
|
||||||
|
|
||||||
// Input vertex attributes (from vertex shader)
|
|
||||||
in vec3 vertexPos;
|
|
||||||
in vec2 fragTexCoord;
|
|
||||||
in vec4 fragColor;
|
|
||||||
|
|
||||||
// Input uniform values
|
|
||||||
uniform sampler2D texture0;
|
|
||||||
uniform sampler2D texture1;
|
|
||||||
uniform vec4 colDiffuse;
|
|
||||||
|
|
||||||
uniform float divider = 0.5;
|
|
||||||
|
|
||||||
out vec4 finalColor;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
// Texel color fetching from texture sampler
|
|
||||||
vec4 texelColor0 = texture(texture0, fragTexCoord);
|
|
||||||
vec4 texelColor1 = texture(texture1, fragTexCoord);
|
|
||||||
|
|
||||||
float x = fract(fragTexCoord.s);
|
|
||||||
float final = smoothstep(divider - 0.1, divider + 0.1, x);
|
|
||||||
|
|
||||||
finalColor = mix(texelColor0, texelColor1, final);
|
|
||||||
}
|
|
@ -20,11 +20,12 @@
|
|||||||
#pragma warning(disable: 4116)
|
#pragma warning(disable: 4116)
|
||||||
#include "raylib-nuklear.h"
|
#include "raylib-nuklear.h"
|
||||||
|
|
||||||
|
Vector2 scaleDPI = { 1.0f, 1.0f };
|
||||||
#define M 10
|
#define M 10
|
||||||
#define N 15
|
#define N 15
|
||||||
#define HEIGHT 50
|
#define HEIGHT (int)(50 * scaleDPI.y)
|
||||||
#define WIDTH 50
|
#define WIDTH (int)(50 * scaleDPI.x)
|
||||||
#define VOFFSET 52
|
#define VOFFSET (int)(52 * scaleDPI.y)
|
||||||
|
|
||||||
#define FWIDTH (float)WIDTH
|
#define FWIDTH (float)WIDTH
|
||||||
#define FHEIGHT (float)HEIGHT
|
#define FHEIGHT (float)HEIGHT
|
||||||
@ -234,9 +235,9 @@ void drawBottomBar(Font font, float fontSize) {
|
|||||||
if (selected_element == gold) gold_string[0] = '>';
|
if (selected_element == gold) gold_string[0] = '>';
|
||||||
else if (selected_element == wall) wall_string[0] = '>';
|
else if (selected_element == wall) wall_string[0] = '>';
|
||||||
|
|
||||||
Vector2 goldpos = { WIDTH / 4, HEIGHT * M };
|
Vector2 goldpos = { FWIDTH / 4, FHEIGHT * M };
|
||||||
Vector2 wallpos = { WIDTH / 4, HEIGHT * M + fontSize };
|
Vector2 wallpos = { FWIDTH / 4, FHEIGHT * M + fontSize };
|
||||||
Vector2 helppos = { WIDTH * N - 550 , HEIGHT * M };
|
Vector2 helppos = { FWIDTH * N - MeasureTextEx(font, help_string, fontSize, 0).x - 20 * scaleDPI.x, FHEIGHT * M};
|
||||||
|
|
||||||
DrawTextEx(font, gold_string, goldpos, fontSize, 0, VSGREEN);
|
DrawTextEx(font, gold_string, goldpos, fontSize, 0, VSGREEN);
|
||||||
DrawTextEx(font, wall_string, wallpos, fontSize, 0, VSGREEN);
|
DrawTextEx(font, wall_string, wallpos, fontSize, 0, VSGREEN);
|
||||||
@ -391,7 +392,7 @@ void handleKeys() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void drawRayguiErrorBoxes() {
|
void drawRayguiErrorBoxes() {
|
||||||
const Rectangle errorBoxRect = { N * WIDTH / 2 - 200, M * HEIGHT / 2 - 75, 400, 150 };
|
const Rectangle errorBoxRect = { N * FWIDTH / 2 - 200, M * FHEIGHT / 2 - 75, 400, 150 };
|
||||||
int btn = -1;
|
int btn = -1;
|
||||||
|
|
||||||
switch (errorCode)
|
switch (errorCode)
|
||||||
@ -436,7 +437,7 @@ int nk_error_box(struct nk_context* ctx, const char* title, const char* error, c
|
|||||||
{
|
{
|
||||||
int result = -1;
|
int result = -1;
|
||||||
if (nk_begin(ctx, title,
|
if (nk_begin(ctx, title,
|
||||||
nk_rect(N * WIDTH / 2 - 200, M * HEIGHT / 2 - 72, 400, 144),
|
nk_rect(N * FWIDTH / 2 - 200, M * FHEIGHT / 2 - 72, 400, 144),
|
||||||
NK_WINDOW_TITLE | NK_WINDOW_BORDER | NK_WINDOW_NO_SCROLLBAR))
|
NK_WINDOW_TITLE | NK_WINDOW_BORDER | NK_WINDOW_NO_SCROLLBAR))
|
||||||
{
|
{
|
||||||
nk_layout_row_dynamic(ctx, 24, 1);
|
nk_layout_row_dynamic(ctx, 24, 1);
|
||||||
@ -501,16 +502,23 @@ void callNKErrorBoxes(struct nk_context* ctx) {
|
|||||||
#define CPSIZE 213
|
#define CPSIZE 213
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
SetConfigFlags(FLAG_WINDOW_HIGHDPI);
|
|
||||||
//SetConfigFlags(FLAG_WINDOW_RESIZABLE);
|
//SetConfigFlags(FLAG_WINDOW_RESIZABLE);
|
||||||
|
|
||||||
const int screenWidth = N * WIDTH;
|
InitWindow( 1280, 720, "lab16 with raylib");
|
||||||
const int screenHeight = M * HEIGHT + VOFFSET;
|
scaleDPI = GetWindowScaleDPI();
|
||||||
const float screenWidthF = (float)screenWidth;
|
|
||||||
const float screenHeightF = (float)screenHeight;
|
|
||||||
const Vector2 resolution = { screenWidthF, screenHeightF };
|
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "lab16 with raylib");
|
int monitor = GetCurrentMonitor();
|
||||||
|
int monitorCenterX = GetMonitorWidth(monitor) / 2;
|
||||||
|
int monitorCenterY = GetMonitorHeight(monitor) / 2;
|
||||||
|
|
||||||
|
int screenWidth = N * WIDTH;
|
||||||
|
int screenHeight = M * HEIGHT + VOFFSET;
|
||||||
|
float screenWidthF = (float)screenWidth;
|
||||||
|
float screenHeightF = (float)screenHeight;
|
||||||
|
Vector2 resolution = { screenWidthF, screenHeightF };
|
||||||
|
|
||||||
|
SetWindowSize(screenWidth, screenHeight);
|
||||||
|
SetWindowPosition(monitorCenterX - screenWidth/2, monitorCenterY - screenHeight/2);
|
||||||
|
|
||||||
SetTargetFPS(60);
|
SetTargetFPS(60);
|
||||||
|
|
||||||
@ -530,7 +538,7 @@ int main()
|
|||||||
//SetTextureFilter(Arial.texture, TEXTURE_FILTER_BILINEAR);
|
//SetTextureFilter(Arial.texture, TEXTURE_FILTER_BILINEAR);
|
||||||
|
|
||||||
RenderTexture2D canvas = LoadRenderTexture(screenWidth, screenHeight);
|
RenderTexture2D canvas = LoadRenderTexture(screenWidth, screenHeight);
|
||||||
SetTextureFilter(canvas.texture, TEXTURE_FILTER_BILINEAR);
|
//SetTextureFilter(canvas.texture, TEXTURE_FILTER_BILINEAR);
|
||||||
SetTextureWrap(canvas.texture, TEXTURE_WRAP_CLAMP);
|
SetTextureWrap(canvas.texture, TEXTURE_WRAP_CLAMP);
|
||||||
|
|
||||||
RenderTexture2D canvasBlurX = LoadRenderTexture(screenWidth, screenHeight);
|
RenderTexture2D canvasBlurX = LoadRenderTexture(screenWidth, screenHeight);
|
||||||
@ -547,12 +555,11 @@ int main()
|
|||||||
Shader watershader = LoadShader(0, "watershader.frag");
|
Shader watershader = LoadShader(0, "watershader.frag");
|
||||||
int waterBumpMapLoc = GetShaderLocation(watershader, "waterBumpMap");
|
int waterBumpMapLoc = GetShaderLocation(watershader, "waterBumpMap");
|
||||||
int watershaderSecondsLoc = GetShaderLocation(watershader, "seconds");
|
int watershaderSecondsLoc = GetShaderLocation(watershader, "seconds");
|
||||||
int waterResolutionLoc = GetShaderLocation(watershader, "resolution");
|
int watershaderResolutionLoc = GetShaderLocation(watershader, "resolution");
|
||||||
SetShaderValue(watershader, waterResolutionLoc, &resolution, SHADER_UNIFORM_VEC2);
|
SetShaderValue(watershader, watershaderResolutionLoc, &resolution, SHADER_UNIFORM_VEC2);
|
||||||
|
|
||||||
Texture waterBump = LoadTexture("waterbump_blur.png");
|
Texture waterBump = LoadTexture("waterbump_blur.png");
|
||||||
SetTextureFilter(waterBump, TEXTURE_FILTER_BILINEAR);
|
SetTextureFilter(waterBump, TEXTURE_FILTER_BILINEAR);
|
||||||
SetShaderValueTexture(watershader, waterBumpMapLoc, waterBump);
|
|
||||||
|
|
||||||
Shader blur13 = LoadShader(0, "blur13.frag");
|
Shader blur13 = LoadShader(0, "blur13.frag");
|
||||||
int blur13resolution = GetShaderLocation(blur13, "resolution");
|
int blur13resolution = GetShaderLocation(blur13, "resolution");
|
||||||
@ -578,7 +585,6 @@ int main()
|
|||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
// Update game logic
|
// Update game logic
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
float frametime = GetFrameTime();
|
float frametime = GetFrameTime();
|
||||||
|
|
||||||
if (errorCode == OK)
|
if (errorCode == OK)
|
||||||
@ -622,7 +628,7 @@ int main()
|
|||||||
|
|
||||||
drawMap();
|
drawMap();
|
||||||
drawPlayer();
|
drawPlayer();
|
||||||
drawBottomBar(InconsolataBold, 24);
|
drawBottomBar(InconsolataBold, 24 * scaleDPI.y);
|
||||||
|
|
||||||
if (editMap) {
|
if (editMap) {
|
||||||
Rectangle rec = {
|
Rectangle rec = {
|
||||||
@ -668,12 +674,12 @@ int main()
|
|||||||
SetShaderValue(watershader, watershaderSecondsLoc, &timeF, SHADER_UNIFORM_FLOAT);
|
SetShaderValue(watershader, watershaderSecondsLoc, &timeF, SHADER_UNIFORM_FLOAT);
|
||||||
|
|
||||||
Rectangle rec = { 0, 0, (float)canvas.texture.width, (float)(-canvas.texture.height) };
|
Rectangle rec = { 0, 0, (float)canvas.texture.width, (float)(-canvas.texture.height) };
|
||||||
BeginShaderMode(watershader);
|
//BeginShaderMode(watershader);
|
||||||
{
|
{
|
||||||
SetShaderValueTexture(watershader, waterBumpMapLoc, waterBump);
|
SetShaderValueTexture(watershader, waterBumpMapLoc, waterBump);
|
||||||
DrawTextureRec(canvas.texture, rec, (Vector2) { 0.0f, 0.0f }, WATERBLUE);
|
DrawTextureRec(canvas.texture, rec, (Vector2) { 0.0f, 0.0f }, WHITE);
|
||||||
}
|
}
|
||||||
EndShaderMode();
|
//EndShaderMode();
|
||||||
|
|
||||||
//BeginTextureMode(canvasBlurX);
|
//BeginTextureMode(canvasBlurX);
|
||||||
//{
|
//{
|
||||||
|
Binary file not shown.
Binary file not shown.
BIN
raylib files/raylib opengl43/raylibdll.lib
Normal file
BIN
raylib files/raylib opengl43/raylibdll.lib
Normal file
Binary file not shown.
1708
raylib files/raylib-5.5_win64_msvc16 opengl33/include/raylib.h
Normal file
1708
raylib files/raylib-5.5_win64_msvc16 opengl33/include/raylib.h
Normal file
File diff suppressed because it is too large
Load Diff
2941
raylib files/raylib-5.5_win64_msvc16 opengl33/include/raymath.h
Normal file
2941
raylib files/raylib-5.5_win64_msvc16 opengl33/include/raymath.h
Normal file
File diff suppressed because it is too large
Load Diff
5262
raylib files/raylib-5.5_win64_msvc16 opengl33/include/rlgl.h
Normal file
5262
raylib files/raylib-5.5_win64_msvc16 opengl33/include/rlgl.h
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Loading…
Reference in New Issue
Block a user