-PRINT_MODE-SHADER-
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:DwarfFortress GLSL renderer
Welcome to the [PRINT_MODE:SHADER]/renderer_glsl project.
=========================================================

This is an implementation of Dwarf Fortress 31.25 renderer 
using OpenGL 2.0 and GLSL 1.2. 

Resources:
    Forum thread: http://www.bay12forums.com/smf/index.php?topic=94528.0
    Source:       https://github.com/lxnt/-PRINT_MODE-SHADER-
    Download:     http://dffd.wimbli.com/file.php?id=5044

Current state:
==============

Game is playable. Graphics and tileset aspect ratio is fixed to the one  of first
tile loaded, this always is the 0th character of the font (tileset). Tiles/graphics
can be of any size, but this does eat video memory and you can bump into video card
limit on texture height.

Download link above points to a compressed libprint_shader.so (with full debug,
that's why the size). Replace your libs/libgraphics.so with it to try this out.

To leave as much CPU time as possible to the game engine, use the following settings:

[SINGLE_BUFFER:YES]
[G_FPS_CAP:25]

The reason is that the [SINGLE_BUFFER:NO] setting will cap your FPS to your monitor 
refresh rate (60Hz nowatimes), but also will waste about 10-15 microseconds for the
refresh to happen. 

On the other hand, [SINGLE_BUFFER:YES] will never wait for the refresh, while
[G_FPS_CAP:25] ensures that time is not wasted on frames you are not able to appreciate
anyway.

On those settings, my phenom 975/radeon 4850 pull about 60-65 game FPS 
on a medium-sized fortress, whereas former driver made it nigh unplayable.


System requirements:
====================

Code is confirmed to work on both i386 and amd64 with:
 - Radeon r600 classic driver, Mesa 7.11+ (Oneiric stock)
 - Radeon r600 Gallium driver, Mesa 7.11+ with patch from 
    https://bugs.freedesktop.org/show_bug.cgi?id=42435
 - llvmpipe, Mesa 7.11+  (gallium software renderer)
 - i965 (Sandy Bridge), Mesa 7.12+ (from xorg-edgers)
 - nvidia and fglrx proprietary drivers
 
Specific graphics hardware and driver requirements are  output on each run, 
so you will see if your box is not up to the task. 
You can check out which cards are capable of what at http://www.kludx.com/

Features not found in other renderers:
======================================

 - minimal processing on the CPU, data is uploaded unchanged
   to the GPU. Grid is uploaded as one vertex per tile 
   as opposed to 6 vertices per tile of renderer_opengl family.
   
 - font and graphics are assembled in-memory into one large texture
   without any sorting, assuming uniform tile size and uploaded once. 
   This is noticeably faster than the one GL call per tile approach 
   used by renderer_opegl family and also skips texture coordinates lookup
   and upload entirely.
   
 - graphics (creatures) are rendered on top of (instead of instead of)
   floor tiles in most cases, leaving parts of floor visible behind them.
   This requires one pass over the screen and screentexpos arrays 
   and maintenance of 'shadow' screen_underlay array. 
   grid_x*grid_y int32 compares and some amount of int32 writes per frame.
   [WW] This feature is broken at the moment.

init.txt tokens specific to this renderer:

[PRINT_MODE:SHADER] - enables the renderer 
[VERTEX_SHADER:data/vertex.shader] - override embedded shader code
[FRAGMENT_SHADER:data/fragment.shader] - same for fragment shader
[SHADER_SET:cbr_is_bold] embedded shader set name. Name list is output at startup.
[DUMP_STUFF:0:dumprefix] - control screen and texture dumping.
    0 - no dumping
    N - dumps texture on upload to the GPU, 
        dumps complete screen data every Nth frame
    second parameter is the prefix for dumps.
[SNAP_WINDOW:NO]  snap window size to not leave black margins (resize only)
[USE_UNDERLAY:NO]  attempt to remember the floor tile under creatures
[DUMP_CREATURES:NO] dump creature draw data to stderr
[FADE_IN:0] fade in screen on startup and on game load, value in milliseconds.
            Default: 250. 'NO' or 0 disables.
[GL_CLEAR_COLOR:0] background color to detect resize/zoom/viewport bugs, also
            the color the fade in fades in from. Value: index into ansi colors.
            Default: 0 = black.

Project needs:
==============
 
 - More testing.
 - Ubuntu release with multi-arch support fixed at last.

What next?
==========

 - remove 16x16 limit for graphics/tile sets. I intend to 
   fully decouple fonts and graphics, the only requirement
   left would be that all graphics are of same size, not 
   necessarily the same as tileset (font) size. Aspect ratio
   can also be different between graphicset and tileset, this
   would require user to decide which one would be used for 
   rendering.
   
 - some sane logging system. fprintfs and cerr</etc/dpkg/dpkg.cfg.d/multiarch

Check that this won't break your system:
    
    apt-get install -s libgl1-mesa-dri:i386  libgl1-mesa-glx:i386 libglu1-mesa:i386 libgl1-mesa-dri-experimental:i386
    
If apt-get wants to remove a bunch of packages, something's seriously broken. Proceed at your own risk.

    apt-get install libgl1-mesa-dri:i386  libgl1-mesa-glx:i386 libglu1-mesa:i386 libgl1-mesa-dri-experimental:i386

3. Install stuff from packages that have multiarch broken: libglew1.5 and libglib2.0-dev

    wget http://mirror.yandex.ru/ubuntu/pool/main/g/glew1.5/libglew1.5_1.5.7.is.1.5.2-1ubuntu4_i386.deb
    wget http://mirror.yandex.ru/ubuntu/pool/main/g/glib2.0/libglib2.0-dev_2.28.6-0ubuntu1_i386.deb

Do not install it. Instead, decompress with dpkg-deb:

    dpkg-deb -x libglew1.5_1.5.7.is.1.5.2-1ubuntu4_i386.deb glew32
    dpkg-deb -x libglib2.0-dev_2.28.6-0ubuntu1_i386.deb glib32

And put library files into /usr/lib32:

    ln -s  libGLEW.so.1.5 glew32/usr/lib/libGLEW.so
    sudo chown 0:0 glew32/usr/lib/libGLEW.so*
    sudo mv glew32/usr/lib/libGLEW.so* /usr/lib32

Put the glibconfig.h from glib32 somewhere. Then point Eclipse 
(project->properties->C/C++Build->Settings->GCC C++ Compiler->Includes)
there. (I put it into /home/lxnt/include32):
    mv glib32/usr/lib/i386-linux-gnu/glib-2.0/include/glibconfig.h ~/include32/

Now you are more or less ready to hit Ctrl-B.


Running it on x86_64 system.
============================

0. Do the steps for cross compilation skipping the development packages and glibconfig.h

1. If you use open source graphics drivers, put  

export LD_LIBRARY_PATH=/usr/lib/i386-linux-gnu/:/usr/lib/i386-linux-gnu/mesa
export LIBGL_DRIVERS_PATH=/usr/lib/i386-linux-gnu/dri

into the ./df script. This selects classic Mesa (non-Gallium)
drivers. If you have a Radeon and don't have Mesa patched for bug 42435,
try 
export LIBGL_DRIVERS_PATH=/usr/lib/i386-linux-gnu/dri-alternates

2. You can delete/rename  libstdc++.so.6 and libgcc_s.so.1
that are in df_linux/libs directory - system ones work fine,
and might have some improvements made after the shipped ones
were compiled.









本源码包内暂不包含可直接显示的源代码文件,请下载源码包。