Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision |
renderer_identification [2019/08/26 03:38] – korshun | renderer_identification [2019/08/26 03:53] – korshun |
---|
====== Renderer identification ====== | ====== Renderer detect ====== |
| |
===== Introduction ===== | ===== Introduction ===== |
| |
You can identify whether the software or OpenGL renderer is currently being used by using ''IsOpenGL'' from ACSUtils. | You can detect whether the client is currently using the software renderer or the OpenGL renderer by calling the ''IsOpenGL'' function from ACSUtils. |
| |
<note warning> | <note warning> |
* don't just check for ''vid_renderer'' and ''gl_nogl'' -- the user may be playing in ZDoom, which doesn't have the OpenGL renderer. | * don't just check for ''vid_renderer'' and ''gl_nogl'' -- the user may be playing in ZDoom, which doesn't have the OpenGL renderer. |
* don't just use [[source_port_identification|IsGZDoom]] and assume that if the engine is GZDoom, the user is playing in OpenGL renderer. | * don't just use [[source_port_identification|IsGZDoom]] and assume that if the engine is GZDoom, the user is playing in OpenGL renderer. |
* don't store the value of ''IsOpenGL'' in a variable -- the renderer can change mid-game. | |
* don't check the renderer serverside -- the server has no renderer. | * don't check the renderer serverside -- the server has no renderer. |
| |
===== IsOpenGL ===== | ===== IsOpenGL ===== |
| |
''bool IsOpenGL()'' -- returns true if the mod is being played in the OpenGL renederer, false if software renderer. | ''bool IsOpenGL()'' -- returns true if the mod is being played in the OpenGL renederer, false if in software renderer. |
| |
If called serverside, ''IsOpenGL'' logs an [[error]] and returns true. | If called serverside, ''IsOpenGL'' logs an [[error]] and returns true, because the server can't identify a client's renderer remotely. The renderer is assumed to be OpenGL when called serverside because the OpenGL renderer has less restrictions. |
| |
<note tip>The renderer can change mid-game. Don't store the result of ''IsOpenGL'' in a variable. Instead, simply call it every time.</note> | <note important> |
| This function will return an incorrect value if ''vid_renderer'' or ''gl_nogl'' is changed mid-game because the renderer only actually switches after restart, but the values of the cvars change immediately. |
| </note> |
| |
===== How it works ===== | |
| |
First, ''IsOpenGL'' checks if it's running serverside (see above). | ===== How it works ===== |
| |
Then ''IsOpenGL'' calls [[renderer_identification|IsZDoom]] to check if it's running in ZDoom. Since ZDoom doesn't have an OpenGL renderer, the renderer is assumed to be software in this case. | This functions first calls [[client_server_detection|IsClient]] to see if it's running on a client (see above). |
| |
Then, ''IsOpenGL'' checks for ''gl_nogl'' - a CVar that lets the user to disable the OpenGL renderer in GZDoom and Zandronum. If it's set, the renderer is assumed to be software. | If it's running on a client, it calls [[port_detection|IsGZDoom]] to check if the port is GZDoom or a derivative like Zandronum. If the port is not a GZDoom derivative, it can't have the OpenGL renderer, and this function returns false. This is to prevent detecting the OpenGL renderer when ZDoom is run with a config from GZDoom which has ''vid_renderer=1''. |
| |
And only then ''IsOpenGL'' checks for ''vid_renderer''. If its value is not 0, the renderer is assumed to be OpenGL. | If the port is confirmed to be a GZDoom derivative, this function checks for two CVars: ''vid_renderer'' and ''gl_nogl''. This function only returns true if ''vid_renderer'' is true and ''gl_nogl'' is false. |
| |
| |