some updates

This commit is contained in:
JuiceyDev 2026-03-06 00:28:53 +01:00
parent 2f7962cbb2
commit 1f37e1d422
4 changed files with 134 additions and 6 deletions

View file

@ -15,8 +15,11 @@ C4JRender RenderManager;
static GLFWwindow *s_window = nullptr;
static int s_textureLevels = 1;
static int s_windowWidth = 1920;
static int s_windowHeight = 1080;
static int s_windowWidth = 1280; // updated to actual framebuffer size each frame
static int s_windowHeight = 720;
static int s_reqWidth = 0; // 0 = auto-detect from primary monitor
static int s_reqHeight = 0;
static bool s_fullscreen = false;
// Thread-local storage for per-thread shared GL contexts.
// The main thread uses s_window directly; worker threads get invisible
@ -54,12 +57,29 @@ void C4JRender::Initialise()
return;
}
// Resolve window dimensions: use caller-requested size, or fall back to
// the primary monitor's native resolution so the window fits any display.
GLFWmonitor *primaryMonitor = glfwGetPrimaryMonitor();
const GLFWvidmode *mode = primaryMonitor ? glfwGetVideoMode(primaryMonitor) : nullptr;
if (s_reqWidth > 0 && s_reqHeight > 0) {
s_windowWidth = s_reqWidth;
s_windowHeight = s_reqHeight;
} else if (mode) {
s_windowWidth = mode->width;
s_windowHeight = mode->height;
}
fprintf(stderr, "[4J_Render] Window %dx%d fullscreen=%s\n",
s_windowWidth, s_windowHeight, s_fullscreen ? "yes" : "no");
fflush(stderr);
// opengl 2.1!!!
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
GLFWmonitor *fsMonitor = s_fullscreen ? primaryMonitor : nullptr;
s_window = glfwCreateWindow(s_windowWidth, s_windowHeight,
"Minecraft Console Edition", nullptr, nullptr);
"Minecraft Console Edition", fsMonitor, nullptr);
if (!s_window) {
fprintf(stderr, "[4J_Render] Failed to create GLFW window\n");
glfwTerminate();
@ -171,6 +191,17 @@ void C4JRender::Present()
glfwPollEvents();
}
void C4JRender::SetWindowSize(int w, int h)
{
s_reqWidth = (w > 0) ? w : 0;
s_reqHeight = (h > 0) ? h : 0;
}
void C4JRender::SetFullscreen(bool fs)
{
s_fullscreen = fs;
}
bool C4JRender::ShouldClose()
{
return !s_window || glfwWindowShouldClose(s_window);

View file

@ -63,6 +63,10 @@ public:
// Core
void Initialise();
void InitialiseContext();
// Call before Initialise() to override window size and/or fullscreen mode.
// If not called, the primary monitor's native resolution is used.
void SetWindowSize(int w, int h);
void SetFullscreen(bool fs);
void StartFrame();
void DoScreenGrabOnNextPresent();
void Present();

View file

@ -587,6 +587,28 @@ int main(int argc, const char *argv[] )
#endif
app.DebugPrintf("---main()\n");
// ---- Parse CLI arguments ----
// Usage: Minecraft.Client [--width W] [--height H] [--fullscreen]
// If --width/--height are omitted the primary monitor's native resolution
// is used automatically.
{
int reqW = 0, reqH = 0;
bool fs = false;
for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "--fullscreen") == 0) {
fs = true;
} else if (strcmp(argv[i], "--width") == 0 && i + 1 < argc) {
reqW = atoi(argv[++i]);
} else if (strcmp(argv[i], "--height") == 0 && i + 1 < argc) {
reqH = atoi(argv[++i]);
}
}
if (reqW > 0 && reqH > 0)
RenderManager.SetWindowSize(reqW, reqH);
if (fs)
RenderManager.SetFullscreen(true);
}
#if 0
// Main message loop
MSG msg = {0};
@ -647,8 +669,15 @@ app.DebugPrintf("---ReadProductCodes()\n");
app.loadMediaArchive();
app.loadStringTable();
ui.init(1920,1080);
// Use the actual framebuffer dimensions so the UI scales to whatever
// window/fullscreen resolution was chosen at startup.
{
int uiW = 1920, uiH = 1080;
RenderManager.GetFramebufferSize(uiW, uiH);
if (uiW < 1) uiW = 1920;
if (uiH < 1) uiH = 1080;
ui.init(uiW, uiH);
}
// storage manager is needed for the trial key check
StorageManager.Init(0,app.GetString(IDS_DEFAULT_SAVENAME),"savegame.dat",FIFTY_ONE_MB,&CConsoleMinecraftApp::DisplaySavingMessage,(LPVOID)&app,"");

View file

@ -11,9 +11,73 @@ Join our community:
* Steam: https://steamcommunity.com/groups/4JCraft
## Planned platforms to be supported:
- Linux (~95%)
- Linux (~85%)
- Emscripten (not started)
- PS3
- macOS (not started)
- iOS (not started)
- Android (not started)
---
## Building (Linux)
### Dependencies
Install the following packages before building (Debian/Ubuntu names shown):
```bash
sudo apt install \
build-essential cmake \
libglfw3-dev libgl-dev libglu1-mesa-dev \
libopenal-dev libvorbis-dev \
libpthread-stubs0-dev
```
On Arch/Manjaro:
```bash
sudo pacman -S base-devel gcc pkgconf cmake glfw-x11 mesa openal libvorbis glu
```
If you are on wayland, swap glfw-x11 to glfw-wayland, but its doesn't matter cuz xwayland got yourself covered
### Configure & Build
```bash
# 1. Configure (only needed once, or after CMakeLists changes)
cmake .
# 2. Build (use -jN with your core count)
make -j$(nproc)
```
The binary is output to:
```
Linux/Debug/Minecraft.Client
```
### Clean
```bash
make clean
```
To fully reset the CMake configuration (removes cache + generated Makefiles):
```bash
rm -rf CMakeCache.txt CMakeFiles cmake_install.cmake Makefile
# Then re-run: cmake . && make -j$(nproc)
```
---
## Running
```bash
# Default — window opens at your primary monitor's native resolution (windowed)
./Linux/Debug/Minecraft.Client
```
(todo refactor)