Optional Vulkan renderer lib for Yamagi Quake II
Find a file
Yamagi d66959e15e Chance render API bump to version 6, make renderer high dpi aware.
This ports the high dpi awareness stuff from the GL3 renderer to the
Vulkan renderer. The approach is the same: Implement a new function
`SDL_Vulkan_GetDrawableSize()` and hook it into the extended renderer
API, the client uses to determine the actual drawable size which is
communicated back into the renderer. Like GL3 Vulkan has a second
representation of the drawable size in the `vid` struct, overwrite
that with the actual drawable size.

Note: Starting with this commit an up to date client which implements
renderer API version 6 is needed. Older clients won't load the renderer.
2023-05-14 09:49:25 +02:00
shaders Add windows shaders.bat generate 2022-03-20 22:37:51 +02:00
src Chance render API bump to version 6, make renderer high dpi aware. 2023-05-14 09:49:25 +02:00
.gitignore Images: Get rid of custom Draw_GetPalette and move to pcx.c 2022-12-14 22:05:30 +02:00
LICENSE Add the vkQuake2 Vulkan renderer ported to YQ2. 2021-05-26 10:31:01 +02:00
Makefile Share R_TextureAnimation 2023-01-22 00:05:14 +02:00
README.md Add dkm models support (daikatana) 2023-02-17 23:57:00 +02:00

Vulkan Renderer Library for Yamagi Quake II

This is the vkQuake2 vulkan renderer library ported to Yamagi Quake II.

Compilation

You'll need:

  • clang or gcc,
  • GNU Make,
  • SDL2 with sdl2-config,
  • vulkan-headers,
  • vulkan-validationlayers if you like to debug issues.

Type make to compile the library. If the compilation is successfull, the library can be found under release/ref_vk.dll (Windows) or release/ref_vk.so (unixoid systems).

Usage

Copy the library next to your Yamagi Quake II executable. You can select Vulkan through the video menu or by cvar with vid_renderer vk followed by a vid_restart.

If you have run into issues, please attach output logs with OS/driver version and device name to the bug report. List of currently tested devices for the reference.

Note: Game saves outputs to Documents\YamagiQ2\stdout.txt under windows.

Console Variables

  • r_validation: Toggle validation layers:

    • 0 - disabled (default in Release)
    • 1 - only errors and warnings, show image load issues
    • 2 - best-practices validation
  • vk_strings: Print some basic Vulkan/GPU information.

  • vk_mem: Print dynamic vertex/index/uniform/triangle fan buffer memory usage statistics.

  • vk_device: Specify index of the preferred Vulkan device on systems with multiple GPUs:

    • -1 - prefer first DISCRETE_GPU (default)
    • 0..n - use device #n (full list of devices is returned by vk_strings command)
  • vk_sampleshading: Toggle sample shading for MSAA. (default: 1)

  • vk_flashblend: Toggle the blending of lights onto the environment. (default: 0)

  • r_polyblend: Blend fullscreen effects: blood, powerups etc. (default: 1)

  • vk_skymip: Toggle the usage of mipmap information for the sky graphics. (default: 0)

  • vk_finish: Inserts a vkDeviceWaitIdle() call on frame render start (default: 0). Don't use this, it's there just for the sake of having a gl_finish equivalent!

  • vk_custom_particles: Toggle particles type:

    • 0 - textured triangles for particle rendering
    • 1 - between using POINT_LIST (default)
    • 2 - textured square for particle rendering
  • vk_particle_size: Rendered particle size. (default: 40)

  • vk_particle_att_a: Intensity of the particle A attribute. (default: 0.01)

  • vk_particle_att_b: Intensity of the particle B attribute. (default: 0)

  • vk_particle_att_c: Intensity of the particle C attribute. (default: 0.01)

  • vk_particle_min_size: The minimum size of a rendered particle. (default: 2)

  • vk_particle_max_size: The maximum size of a rendered particle. (default: 40)

  • vk_picmip: Shrink factor for the textures. (default: 0)

  • vk_pixel_size: Pixel size when rendering the world, used to simulate lower screen resolutions. The value represents the length, in pixels, of the side of each pixel block. For example, with size 2 pixels are 2x2 squares, and at 1600x1200 the image is effectively an upscaled 800x600 image. (default: 1)

  • vk_dynamic: Use dynamic lighting. (default: 1)

  • vk_showtris: Display mesh triangles. (default: 0)

  • vk_lightmap: Display lightmaps. (default: 0)

  • vk_postprocess: Toggle additional color/gamma correction. (default: 1)

  • vk_mip_nearfilter: Use nearest-neighbor filtering for mipmaps. (default: 0)

  • vk_texturemode: Change current texture filtering mode:

    • VK_NEAREST - nearest-neighbor interpolation, no mipmaps
    • VK_LINEAR - linear interpolation, no mipmaps
    • VK_MIPMAP_NEAREST - nearest-neighbor interpolation with mipmaps
    • VK_MIPMAP_LINEAR - linear interpolation with mipmaps (default)
  • vk_lmaptexturemode: Same as vk_texturemode but applied to lightmap textures.

  • vk_underwater: Warp the scene if underwater. Set to 0 to disable the effect. Defaults to 1.

Console Variables (MacOS)

  • vk_molten_metalbuffers: enable/disable Metal buffers to bind textures more efficiently (>= Big Sur). (default: 0)

  • vk_molten_fastmath: enable/disable float point op optimisations. (default: 0)

Custom model format support

Render unofficially supports mdl/Quake 1, dkm/Daikatana and fm/Heretic2, are provided without any warranty of support. The simplest way to check is renaming the mdl/dkm/fm format file to md2 and place instead the original tris.md2 file. FM is rendered with all meshes without support of filtering/selecting the exact part of the model.