Commit graph

444 commits

Author SHA1 Message Date
Christoph Oelckers
5b302ed3a6 - added benchmarking calls for glDrawArrays to see how well issunig draw calls performs on different hardware. 2014-06-14 15:16:33 +02:00
Christoph Oelckers
0ce6b40672 - fixed compile error in gl_skydome.cpp
- disable GL_ARB_buffer_storage when a -glversion parameter less than 4.0 is given. According to the spec this extension requires 4.0 so if emulating something lower it should not be used.
2014-06-14 14:58:17 +02:00
Christoph Oelckers
5e22c82e79 - use buffer for rendering the sky on all GL versions since the differences for making GL2.0 work are rather small. 2014-06-14 10:38:30 +02:00
Christoph Oelckers
8d9a90cd22 - rewrote sky dome rendering to use a static vertex buffer if not on OpenGL 2.x. 2014-06-14 01:24:28 +02:00
Christoph Oelckers
c39318f406 - use vertex buffer and reuse of data for stencil drawing. A stencil needs to be drawn multiple times with the same polygons so this is a good place to optimize. 2014-05-31 09:32:17 +02:00
Christoph Oelckers
a1ec6ab1ba - fixed some Linux warnings. 2014-05-24 16:53:57 +02:00
Christoph Oelckers
09ba62fbef - put all the common part of buffer based drawing into a separate method of the vertex buffer. 2014-05-20 22:37:38 +02:00
Christoph Oelckers
23fbd69963 - 4 more places where immediate mode drawing has been substituted with a buffer-based alternative. 2014-05-20 22:20:15 +02:00
Christoph Oelckers
579eff5b96 - add vertex buffer based rendering for decals. 2014-05-12 22:46:30 +02:00
Christoph Oelckers
cf45f2d718 - added missing shader files. 2014-05-12 22:24:26 +02:00
Christoph Oelckers
b514a815f4 - enable use of vertex buffer for sprite rendering. 2014-05-12 20:23:54 +02:00
Christoph Oelckers
4d005bdfa0 shader rework
All those special shaders have been merged together.
Mostly working but the non-shader lighting seems a bit broken.
2014-05-12 14:45:41 +02:00
Christoph Oelckers
98cc7eeb99 pass softlightlevel through render state. 2014-05-12 00:13:19 +02:00
Christoph Oelckers
b9a6fe80a4 Do not use the shader to handle STYLEF_RedIsAlpha.
Turns out that the name doesn't accurately describe what it does.
It is correct for images that come with their own palette or are true color.
But for images using the game palette it doesn't use the red channel to determine translucency but the palette index! Ugh...

This means it cannot be done with a simple operation in the shader because it won't get a proper source image. The only solution is to create a separate texture.
2014-05-11 23:56:53 +02:00
Christoph Oelckers
506798f134 allow brightmaps and fullbright objects in fog. The reasons why they were disabled no longer exist. 2014-05-11 23:12:28 +02:00
Christoph Oelckers
c47c7421a3 - route all glColor calls through render state.
- add sector links to dynamic lights.
2014-05-11 22:57:42 +02:00
Christoph Oelckers
978ace241c - removed all code that mixes together the different lighting methods. Now everything goes through the 3 different light parameters in the render state.
- removed cm parameter from many functions.
2014-05-11 21:47:54 +02:00
Christoph Oelckers
887d35d559 - remove colormap from texture generation parameters. The one remaining special case, alpha texture on old hardware is now handled by the currently set texture mode at the time of use.
- use the cleaned up decal lighting code from the first GLEW branch.
2014-05-11 19:44:19 +02:00
Christoph Oelckers
7793bbbcc9 Further cleanup of lighting code.
- remove thing color from lighting calculations.
- implement alpha textures and inverse sprites for infrared as texture modes. This still requires some handling for the alpha texture mode for non-shader rendering because there is no way in the fixed pipeline to do it. The inverted texture effect can be done with a texture combiner.
- fixed: ThingColor for sprites was set in the wrong place. It must be in the Process function, not in the lighting calculation.
- added functions for isolated calculation of sprites' dynlight color.
2014-05-11 17:56:38 +02:00
Christoph Oelckers
52056a05bd - changed handling of DynLight in shader to serve as a global dynamic light color for all lighting modes. 2014-05-11 16:49:17 +02:00
Christoph Oelckers
53f4cd0108 - added objectcolor uniform. This will be used to hold the thingcolor for shader based rendering. 2014-05-11 16:06:25 +02:00
Christoph Oelckers
f3a9cb0cfa remove special texture creation for fullscreen colormaps.
On GL 3.x+ this isn't needed at all and on older hardware it causes performance issues, in particular with hires textures due to impossibility of precaching.
In addition it forces some really awkward handling of lighting for things that have their own color, like stenciled sprites or particles.

With this special case gone it will be possible to handle this case in a saner manner than it is right now.

As compensation for older hardware a fullscreen blend will be drawn over the entire screen. This won't be 100% accurate but it's preferable to keeping the current method.
2014-05-11 14:46:37 +02:00
Christoph Oelckers
09f4071436 Ok, it had to be done: Removed shader support for pre GLSL 1.3/GL 3.0 hardware. The compromises needed to accomodate these are just too bad and would block any attempt at streamlining the code. 2014-05-11 13:27:51 +02:00
Christoph Oelckers
f7404d20fb - add vertex buffer based drawing for all walls and flats. 2014-05-11 01:23:27 +02:00
Christoph Oelckers
7d3beb665b - rewrote vertex buffer code to require GL_ARB_BUFFER_STORAGE extension.
This means it won't work anymore on anything that doesn't support OpenGL 4.0, but I don't think this is a problem. On older NVidia cards performance gains could not be seen and on older AMDs using the vertex buffer was even worse as long as it got mixed with immediate mode rendering.
2014-05-10 21:47:07 +02:00
Christoph Oelckers
b09405a8bd - changed rendering of glowing walls so that it doesn't require an additional vertex attribute, just pass the floor and ceiling planes as uniforms. 2014-05-10 17:09:43 +02:00
Christoph Oelckers
64d991b9b3 Merge branch 'master' into Glew_Version_For_Real 2014-05-10 15:29:06 +02:00
Christoph Oelckers
1d4ea9f162 - removed the __asm nop breakpoints for debugging. They not only do not work on non-MSVC but also not on 64 bit. 2014-05-08 09:48:39 +02:00
Christoph Oelckers
69af73d9b9 - alternative configuration using GLEW to get extension functions. This requires GL 2.0, though so it won't be promoted to the mainline for the time being.
- removed all pre GL 2.0 support.
2014-04-06 14:35:44 +02:00
Christoph Oelckers
d46315c44b - some finetuning of subtractive effect. 2013-12-05 15:39:46 +01:00
Christoph Oelckers
95163e378e - added a fog layer when drawing sprites with render style reverse subtract. 2013-12-05 15:06:10 +01:00
Christoph Oelckers
9ac3b6aa1b - fixed: IsVisibleToPlayer needs to be checked for the owner of owned dynamic lights. 2013-11-30 13:15:22 +01:00
Christoph Oelckers
992994239b - changed rules for drawing HUD sprites to match the software renderer. 2013-11-30 13:01:48 +01:00
Christoph Oelckers
12985cf635 - fixed: Particle drawing needs to apply the current fixed colormap to the particle's color. 2013-11-30 12:35:38 +01:00
Christoph Oelckers
2885056f46 - moved GLEXT API out of RenderContext struct. 2013-09-03 18:29:39 +02:00
Christoph Oelckers
26943fe3fd - removed gl interface function pointers for all OpenGL32.dll entry points. 2013-09-03 14:05:41 +02:00
Christoph Oelckers
737708b635 - fix c++11's compile problems. 2013-08-28 08:33:11 +02:00
Christoph Oelckers
61af682be9 - made some alterations to last commit after reviewing how the broken code managed to get into GZDoom. 2013-08-27 23:53:14 +02:00
Christoph Oelckers
e6f571729f - fixed: When calculating an y-texture offset the scale was multiplied with instead of divided by. 2013-08-27 23:31:23 +02:00
Christoph Oelckers
b61ef3a107 - bumped minimum supported OpenGL version to 1.4. The engine was already using several 1.3 and 1.4 features which would have caused problems on 1.2.
- removed gl_vid_compatibility. With the bump to 1.4 no hardware requiring this flag is supported anymore.
- disabled 16 bit framebuffers for the same reason. As a conseqence all code for rendering without stencil could also be removed.
2013-08-18 15:41:52 +02:00
Christoph Oelckers
62fd6c8e74 - fixed: light values read from 3D floor light lists for lighting sprites were not clamped to [0..255]. 2013-08-09 23:12:21 +02:00
Christoph Oelckers
4e4eb7189a - fixed: negative extra light levels should not be treated like inverse flashes, that's only the case for INT_MIN. 2013-07-22 17:30:08 +02:00
Christoph Oelckers
a73d1b792c - fixed: Assignment of GetLightLevel to GLWall::lightlevel must be clamped. This was done incorrectly in the last SVN version which clamped the result of GetLightLevel, causing problems elsewhere. 2013-06-23 10:17:58 +02:00
Christoph Oelckers
399d0974ab - added GL render as of SVN revision 1600. 2013-06-23 09:49:34 +02:00