HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Как профиксить глоу ? (https://hlfx.ru/forum/showthread.php?threadid=1015)
Отправлено FiEctro 20-11-2007 в 17:49:
Как профиксить глоу ?
Собсно сталкунулся с непонятнейшим и неприятнейшим багом со спиритовским глоу ( см. аттач ) ...
Сразу говорю дело !только! в коде глоу т.к. я тестил и с разными cg и на самом спирите .. Эффект был один и тоже ...
Вот собсно код чтоб вам спирит не качать ...
C++ Source Code:
1 | #include "r_studioint.h" |
3 | extern engine_studio_api_t IEngineStudio; |
6 | bool bGlowShaderInitialised = false; |
7 | bool bGlowLowEndInitialised = false; |
10 | CGprofile g_cgVertProfile; |
11 | CGprofile g_cgFragProfile; |
13 | CGprogram g_cgVP_GlowDarken; |
14 | CGprogram g_cgFP_GlowDarken; |
16 | CGprogram g_cgVP_GlowBlur; |
17 | CGprogram g_cgFP_GlowBlur; |
19 | CGprogram g_cgVP_GlowCombine; |
20 | CGprogram g_cgFP_GlowCombine; |
22 | CGparameter g_cgpVP0_ModelViewMatrix; |
23 | CGparameter g_cgpVP1_ModelViewMatrix; |
24 | CGparameter g_cgpVP1_XOffset; |
25 | CGparameter g_cgpVP1_YOffset; |
26 | CGparameter g_cgpVP2_ModelViewMatrix; |
28 | unsigned int g_uiSceneTex; |
29 | unsigned int g_uiBlurTex; |
32 | unsigned int g_uiScreenTex = 0; |
33 | unsigned int g_uiGlowTex = 0; |
36 | void InitScreenGlow(void); |
37 | void InitScreenGlowShader(void); |
38 | void InitScreenGlowLowEnd(void); |
39 | void RenderScreenGlow(void); |
40 | void RenderScreenGlowShader(void); |
41 | void RenderScreenGlowLowEnd(void); |
42 | bool LoadProgram(CGprogram* pDest, CGprofile profile, const char* szFile); |
45 | void DrawQuad(int width, int height, int ofsX = 0, int ofsY = 0) |
50 | glTexCoord2f(ofsX,ofsY); |
52 | glTexCoord2f(ofsX,height+ofsY); |
54 | glTexCoord2f(width+ofsX,height+ofsY); |
56 | glTexCoord2f(width+ofsX,ofsY); |
62 | void RenderScreenGlow() |
64 | if (IEngineStudio.IsHardware() != 1) |
67 | if (CVAR_GET_FLOAT("r_glow") == 0) //check the cvar for the glow is on. |
70 | if (CVAR_GET_FLOAT("r_glow") == 1){ //check the mode is shader |
71 | RenderScreenGlowShader(); //AJH don't need r_glowmode, use r_glow 0/1/2 instead |
74 | else if (CVAR_GET_FLOAT("r_glow") == 2){ //If its not a shader its the lowend |
75 | RenderScreenGlowLowEnd(); //AJH don't need r_glowmode, use r_glow 0/1/2 instead |
81 | if (IEngineStudio.IsHardware() != 1) |
84 | if (CVAR_GET_FLOAT("r_glow") == 0) |
87 | if (CVAR_GET_FLOAT("r_glow") == 1){ |
88 | InitScreenGlowShader(); //AJH don't need r_glowmode, use r_glow 0/1/2 instead |
91 | else if (CVAR_GET_FLOAT("r_glow") == 2){ |
92 | InitScreenGlowLowEnd(); //AJH don't need r_glowmode, use r_glow 0/1/2 instead |
95 | //END glow effect functions -- FragBait0 |
97 | //START shader glow effect -- FragBait0 |
98 | inline bool LoadProgram(CGprogram* pDest, CGprofile profile, const char* szFile) |
100 | const char* szGameDir = gEngfuncs.pfnGetGameDirectory(); |
102 | sprintf(file, "%s/%s", szGameDir, szFile); |
104 | *pDest = cgCreateProgramFromFile(g_cgContext, CG_SOURCE, file, profile, "main", 0); |
106 | MessageBox(NULL, cgGetErrorString(cgGetError()), NULL, NULL); |
110 | cgGLLoadProgram(*pDest); |
115 | void InitScreenGlowShader(void) |
117 | bGlowShaderInitialised = false; |
118 | // OPENGL EXTENSION LOADING |
119 | glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)wglGetProcAddress("glActiveTextureARB"); |
122 | unsigned char* pBlankTex = new unsigned char[ScreenWidth*ScreenHeight*3]; |
123 | memset(pBlankTex, 0, ScreenWidth*ScreenHeight*3); |
125 | glGenTextures(1, &g_uiSceneTex); |
126 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex); |
127 | glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
128 | glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
129 | glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB8, ScreenWidth, ScreenHeight, 0, GL_RGB8, GL_UNSIGNED_BYTE, pBlankTex); |
131 | glGenTextures(1, &g_uiBlurTex); |
132 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiBlurTex); |
133 | glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
134 | glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
135 | glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB8, ScreenWidth/4, ScreenHeight/4, 0, GL_RGB8, GL_UNSIGNED_BYTE, pBlankTex); |
140 | g_cgContext = cgCreateContext(); |
142 | MessageBox(NULL, "Couldn't make Cg context", NULL, NULL); |
147 | g_cgVertProfile = cgGLGetLatestProfile(CG_GL_VERTEX); |
148 | if (g_cgVertProfile == CG_PROFILE_UNKNOWN) { |
149 | MessageBox(NULL, "Couldn't fetch valid VP profile", NULL, NULL); |
153 | cgGLSetOptimalOptions(g_cgVertProfile); |
156 | if (!LoadProgram(&g_cgVP_GlowDarken, g_cgVertProfile, "cg/glow_darken_vp.cg")) |
159 | if (!LoadProgram(&g_cgVP_GlowBlur, g_cgVertProfile, "cg/glow_blur_vp.cg")) |
162 | if (!LoadProgram(&g_cgVP_GlowCombine, g_cgVertProfile, "cg/glow_combine_vp.cg")) |
166 | g_cgpVP0_ModelViewMatrix = cgGetNamedParameter(g_cgVP_GlowDarken, "ModelViewProj"); |
168 | g_cgpVP1_ModelViewMatrix = cgGetNamedParameter(g_cgVP_GlowBlur, "ModelViewProj"); |
169 | g_cgpVP1_XOffset = cgGetNamedParameter(g_cgVP_GlowBlur, "XOffset"); |
170 | g_cgpVP1_YOffset = cgGetNamedParameter(g_cgVP_GlowBlur, "YOffset"); |
172 | g_cgpVP2_ModelViewMatrix = cgGetNamedParameter(g_cgVP_GlowCombine, "ModelViewProj"); |
175 | g_cgFragProfile = cgGLGetLatestProfile(CG_GL_FRAGMENT); |
176 | if (g_cgFragProfile == CG_PROFILE_UNKNOWN) { |
177 | MessageBox(NULL, "Couldn't fetch valid FP profile", NULL, NULL); |
181 | cgGLSetOptimalOptions(g_cgFragProfile); |
184 | if (!LoadProgram(&g_cgFP_GlowDarken, g_cgFragProfile, "cg/glow_darken_fp.cg")) |
187 | if (!LoadProgram(&g_cgFP_GlowBlur, g_cgFragProfile, "cg/glow_blur_fp.cg")) |
190 | if (!LoadProgram(&g_cgFP_GlowCombine, g_cgFragProfile, "cg/glow_combine_fp.cg")) |
193 | bGlowShaderInitialised = true; |
196 | void DoBlur(unsigned int uiSrcTex, unsigned int uiTargetTex, int srcTexWidth, int srcTexHeight, int destTexWidth, int destTexHeight, float xofs, float yofs) |
198 | cgGLBindProgram(g_cgVP_GlowBlur); |
199 | cgGLBindProgram(g_cgFP_GlowBlur); |
201 | glActiveTextureARB(GL_TEXTURE0_ARB); |
202 | glEnable(GL_TEXTURE_RECTANGLE_NV); |
203 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiSrcTex); |
205 | glActiveTextureARB(GL_TEXTURE1_ARB); |
206 | glEnable(GL_TEXTURE_RECTANGLE_NV); |
207 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiSrcTex); |
209 | glActiveTextureARB(GL_TEXTURE2_ARB); |
210 | glEnable(GL_TEXTURE_RECTANGLE_NV); |
211 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiSrcTex); |
213 | glActiveTextureARB(GL_TEXTURE3_ARB); |
214 | glEnable(GL_TEXTURE_RECTANGLE_NV); |
215 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiSrcTex); |
217 | cgGLSetParameter1f(g_cgpVP1_XOffset, xofs); |
218 | cgGLSetParameter1f(g_cgpVP1_YOffset, yofs); |
220 | glViewport(0, 0, destTexWidth, destTexHeight); |
222 | DrawQuad(srcTexWidth, srcTexHeight); |
224 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiTargetTex); |
225 | glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, destTexWidth, destTexHeight, 0); |
228 | void RenderScreenGlowShader(void) |
231 | // check to see if we can render it. |
232 | if (IEngineStudio.IsHardware() != 1){ |
235 | /* AJH - This is redundant as the function now returns if r_glow!=1 |
236 | //check the cvar for the glow is on. |
237 | if (CVAR_GET_FLOAT("r_glow") == 0) |
241 | //if the mode isn't shader then return. |
242 | if (CVAR_GET_FLOAT("r_glow") != 1) |
245 | if (!bGlowShaderInitialised) |
246 | InitScreenGlowShader(); |
248 | if (!bGlowShaderInitialised){ //if the initialisation dosent work for some reason |
249 | gEngfuncs.Cvar_SetValue( "r_glow", 0 ); |
253 | // STEP 1: Grab the screen and put it into a texture |
254 | glActiveTextureARB(GL_TEXTURE0_ARB); |
255 | glEnable(GL_TEXTURE_RECTANGLE_NV); |
257 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex); |
258 | glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth, ScreenHeight, 0); |
260 | // STEP 2: Set up an orthogonal projection |
261 | glMatrixMode(GL_MODELVIEW); |
265 | glMatrixMode(GL_PROJECTION); |
268 | glOrtho(0, 1, 1, 0, 0.1, 100); |
272 | // STEP 3: Initialize Cg programs and parameters for darken |
273 | cgGLEnableProfile(g_cgVertProfile); |
274 | cgGLEnableProfile(g_cgFragProfile); |
276 | cgGLBindProgram(g_cgVP_GlowDarken); |
277 | cgGLBindProgram(g_cgFP_GlowDarken); |
279 | cgGLSetStateMatrixParameter(g_cgpVP0_ModelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY); |
281 | // STEP 4: Render the current scene texture to a new, lower-res texture, darkening non-bright areas of the scene |
282 | glViewport(0, 0, ScreenWidth/4, ScreenHeight/4); |
283 | glActiveTextureARB(GL_TEXTURE0_ARB); |
285 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex); |
287 | DrawQuad(ScreenWidth, ScreenHeight); |
289 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiBlurTex); |
290 | glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth/4, ScreenHeight/4, 0); |
292 | // STEP 5: Initialise Cg programs and parameters for blurring |
293 | cgGLBindProgram(g_cgVP_GlowBlur); |
294 | cgGLBindProgram(g_cgFP_GlowBlur); |
296 | cgGLSetStateMatrixParameter(g_cgpVP1_ModelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY); |
299 | int iNumBlurSteps = CVAR_GET_FLOAT("r_glowblur"); //use new CVAR --FragBait0 |
300 | for (int i = 0; i < iNumBlurSteps; i++) { |
301 | DoBlur(g_uiBlurTex, g_uiBlurTex, ScreenWidth/4, ScreenHeight/4, ScreenWidth/4, ScreenHeight/4, 1, 0); |
302 | DoBlur(g_uiBlurTex, g_uiBlurTex, ScreenWidth/4, ScreenHeight/4, ScreenWidth/4, ScreenHeight/4, 0, 1); |
305 | // STEP 7: Set up Cg for combining blurred glow with original scene |
306 | cgGLBindProgram(g_cgVP_GlowCombine); |
307 | cgGLBindProgram(g_cgFP_GlowCombine); |
309 | cgGLSetStateMatrixParameter(g_cgpVP2_ModelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY); |
311 | glActiveTextureARB(GL_TEXTURE0_ARB); |
312 | glEnable(GL_TEXTURE_RECTANGLE_NV); |
313 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex); |
315 | glActiveTextureARB(GL_TEXTURE1_ARB); |
316 | glEnable(GL_TEXTURE_RECTANGLE_NV); |
317 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiBlurTex); |
319 | // STEP 8: Do the combination, rendering to the screen without grabbing it to a texture |
320 | glViewport(0, 0, ScreenWidth, ScreenHeight); |
322 | DrawQuad(ScreenWidth/4, ScreenHeight/4); |
324 | // STEP 9: Restore the original projection and modelview matrices and disable rectangular textures on all units |
325 | glMatrixMode(GL_PROJECTION); |
328 | glMatrixMode(GL_MODELVIEW); |
331 | cgGLDisableProfile(g_cgVertProfile); |
332 | cgGLDisableProfile(g_cgFragProfile); |
334 | glActiveTextureARB(GL_TEXTURE0_ARB); |
335 | glDisable(GL_TEXTURE_RECTANGLE_NV); |
337 | glActiveTextureARB(GL_TEXTURE1_ARB); |
338 | glDisable(GL_TEXTURE_RECTANGLE_NV); |
340 | glActiveTextureARB(GL_TEXTURE2_ARB); |
341 | glDisable(GL_TEXTURE_RECTANGLE_NV); |
343 | glActiveTextureARB(GL_TEXTURE3_ARB); |
344 | glDisable(GL_TEXTURE_RECTANGLE_NV); |
346 | glActiveTextureARB(GL_TEXTURE0_ARB); |
347 | glClear(GL_DEPTH_BUFFER_BIT); |
349 | //END shader glow effect --FragBait0 |
351 | //START lowend glow effect --FragBait0 |
352 | void InitScreenGlowLowEnd(void) |
354 | bGlowLowEndInitialised = false; |
356 | // create a load of blank pixels to create textures with |
357 | unsigned char* pBlankTex = new unsigned char[ScreenWidth*ScreenHeight*3]; |
358 | memset(pBlankTex, 0, ScreenWidth*ScreenHeight*3); |
360 | // Create the SCREEN-HOLDING TEXTURE |
361 | glGenTextures(1, &g_uiScreenTex); |
362 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiScreenTex); |
363 | glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
364 | glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
365 | glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB8, ScreenWidth, ScreenHeight, 0, GL_RGB8, GL_UNSIGNED_BYTE, pBlankTex); |
367 | // Create the BLURRED TEXTURE |
368 | glGenTextures(1, &g_uiGlowTex); |
369 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiGlowTex); |
370 | glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
371 | glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
372 | glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB8, ScreenWidth/4, ScreenHeight/4, 0, GL_RGB8, GL_UNSIGNED_BYTE, pBlankTex); |
377 | bGlowLowEndInitialised = true; |
380 | void RenderScreenGlowLowEnd(void) |
383 | // check to see if we can render it. |
384 | if (IEngineStudio.IsHardware() != 1){ |
388 | /* AJH - This is redundant as the function now returns if r_glow!=2 |
389 | //check the cvar for the glow is on. |
390 | if (CVAR_GET_FLOAT("r_glow") == 0) |
393 | //check the mode is low-end |
394 | if (CVAR_GET_FLOAT("r_glow") != 2) //AJH don't need r_glowmode, use r_glow 0/1/2 instead |
397 | if (!bGlowLowEndInitialised) |
398 | InitScreenGlowLowEnd(); |
400 | if (!bGlowLowEndInitialised){ //if the initialisation dosent work for some reason |
401 | gEngfuncs.Cvar_SetValue( "r_glow", 0 ); //AJH may as well set this here too. |
404 | // enable some OpenGL stuff |
405 | glEnable(GL_TEXTURE_RECTANGLE_NV); |
407 | glDisable(GL_DEPTH_TEST); |
409 | // STEP 1: Grab the screen and put it into a texture |
410 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiScreenTex); |
411 | glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth, ScreenHeight, 0); |
413 | // STEP 2: Set up an orthogonal projection |
414 | glMatrixMode(GL_MODELVIEW); |
418 | glMatrixMode(GL_PROJECTION); |
421 | glOrtho(0, 1, 1, 0, 0.1, 100); |
423 | // STEP 3: Render the current scene to a new, lower-res texture, darkening non-bright areas of the scene |
424 | // by multiplying it with itself a few times. |
425 | glViewport(0, 0, ScreenWidth/4, ScreenHeight/4); |
427 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiScreenTex); |
429 | glBlendFunc(GL_DST_COLOR, GL_ZERO); |
433 | DrawQuad(ScreenWidth, ScreenHeight); |
437 | for (int i = 0; i < CVAR_GET_FLOAT("r_glowdark"); i++) |
438 | DrawQuad(ScreenWidth, ScreenHeight); |
440 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiGlowTex); |
441 | glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth/4, ScreenHeight/4, 0); |
443 | // STEP 4: Blur the now darkened scene in the horizontal direction. |
444 | float blurAlpha = 1 / (CVAR_GET_FLOAT("r_glowblur")*2 + 1); |
446 | glColor4f(1,1,1,blurAlpha); |
448 | glBlendFunc(GL_SRC_ALPHA, GL_ZERO); |
450 | DrawQuad(ScreenWidth/4, ScreenHeight/4); |
452 | glBlendFunc(GL_SRC_ALPHA, GL_ONE); |
454 | for (i = 0; i <= CVAR_GET_FLOAT("r_glowblur"); i++) { |
455 | DrawQuad(ScreenWidth/4, ScreenHeight/4, -i, 0); |
456 | DrawQuad(ScreenWidth/4, ScreenHeight/4, i, 0); |
459 | glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth/4, ScreenHeight/4, 0); |
461 | // STEP 5: Blur the horizontally blurred image in the vertical direction. |
462 | glBlendFunc(GL_SRC_ALPHA, GL_ZERO); |
464 | DrawQuad(ScreenWidth/4, ScreenHeight/4); |
466 | glBlendFunc(GL_SRC_ALPHA, GL_ONE); |
468 | for (i = 0; i <= CVAR_GET_FLOAT("r_glowblur"); i++) { |
469 | DrawQuad(ScreenWidth/4, ScreenHeight/4, 0, -i); |
470 | DrawQuad(ScreenWidth/4, ScreenHeight/4, 0, i); |
473 | glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth/4, ScreenHeight/4, 0); |
475 | // STEP 6: Combine the blur with the original image. |
476 | glViewport(0, 0, ScreenWidth, ScreenHeight); |
480 | DrawQuad(ScreenWidth/4, ScreenHeight/4); |
483 | glBlendFunc(GL_ONE, GL_ONE); |
485 | for (i = 0; i < CVAR_GET_FLOAT("r_glowstrength"); i++) { |
486 | DrawQuad(ScreenWidth/4, ScreenHeight/4); |
489 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiScreenTex); |
491 | DrawQuad(ScreenWidth, ScreenHeight); |
493 | // STEP 7: Restore the original projection and modelview matrices and disable rectangular textures. |
494 | glMatrixMode(GL_PROJECTION); |
497 | glMatrixMode(GL_MODELVIEW); |
500 | glDisable(GL_TEXTURE_RECTANGLE_NV); |
501 | glEnable(GL_DEPTH_TEST); |
503 | glClear(GL_DEPTH_BUFFER_BIT); |
В середине чтото коментарии както криво получились ... На самом деле в коде не так ...
Заранее благодарен ...
З.Ы. что интересное глюк проявляется не сразу ( обычно начинается с неправильного скейла в аномальных лабораториях ... И беспределом перед входом в офис ...__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено XaeroX 20-11-2007 в 18:04:
После смены уровня глюки, что ли? Или через некоторое время на том же уровне?
__________________
Отправлено FiEctro 20-11-2007 в 18:23:
>> После смены уровня глюки, что ли?
Ну да ...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено XaeroX 20-11-2007 в 20:17:
-CJ- так эти глюки и в спирите были. Это проблема очень многих модов, использующих OpenGL-эффекты 
__________________
Отправлено FiEctro 21-11-2007 в 09:21:
XaeroX дык как это фиксить ?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено XaeroX 21-11-2007 в 10:17:
-CJ- надо избавляться от glGenTextures. Посмотри как в сорцах ксаша делается, там чтото типа GL_AllocateTextureIndex или навроде того.
__________________
Отправлено FiEctro 21-11-2007 в 10:53:
XaeroX в ксаше помоему нету глоу ...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено XaeroX 21-11-2007 в 11:15:
-CJ- ну и что? Там текстуры создаются. Вот и посмотри, как там делается. 
__________________
Отправлено FiEctro 21-11-2007 в 11:38:
XaeroX что конкретно ?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Ku2zoff 21-11-2007 в 12:54:
Я так не разу у себя и не видел нормальный шейдерный glow. Всё смазывается и съезжает с экрана. Есть ли возможность использовать его совместно с зеркалами и мониторами без этого глюка?
Отправлено FiEctro 21-11-2007 в 13:12:
>> без этого глюка?
Без размазаваний ? Да ...
Размазывания профикшены в коде выше ...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Ku2zoff 21-11-2007 в 13:26:
-CJ- у меня и с этого кода не пашет. Может дело в самих шейдерах?
Добавлено 21-11-2007 в 19:26:
Вот в аттаче вари ант с глоу и без него, причём на обоих скринах игрок смотрит в одну точку...
Отправлено XaeroX 21-11-2007 в 13:29:
Цитата:
-CJ- писал:
что конкретно ?
Цитата:
XaeroX писал:
надо избавляться от glGenTextures. Посмотри как в сорцах ксаша делается, там чтото типа GL_AllocateTextureIndex или навроде того
Почему по два раза писать надо-то? 
__________________
Отправлено Ku2zoff 21-11-2007 в 19:32:
>>Без размазаваний ? Да ... Размазывания профикшены в коде выше ...
Там вообще закомментирована часть кода, отвечающая за CG шейдеры и оставлен только ScreenGlowLowEnd, который и так без проблем работает, так что нифига не профикшено.
Я покопался в коде глоу и получил вот то что в аттаче. На четверть экрана работает идеально, но когда растягиваешь до полного размера - изображение искажается, понятия не имею из-за чего.
Отправлено FiEctro 22-11-2007 в 11:16:
>> Там вообще закомментирована часть кода, отвечающая за CG шейдеры и оставлен только ScreenGlowLowEnd, который и так без проблем работает, так что нифига не профикшено.
Блин я для кого писал ? Что эта большая часть закоментирована только из за глюка форума ! В студии все ОК ...
Кстати как с тобой вообще я могу связаться ? В аське тебя вообще не бывает ...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Ku2zoff 22-11-2007 в 11:28:
Ну и в студии там не всё в порядке. У меня всё было криво до того как:
Я сидел вчера за компом до часу ночи и фиксил глоу. Много времени потратил на подгонку размеров viewport'ов и drawquad'ов.
Сегодня профиксил эти самые текстуры как подсказал XaeroX. Просто надо сменить все glGenTextures(1, &имяТекстуры);
на имяТекстуры = AllocateTextureIndex();
Вот этот самый AllocateTextureIndex, чтобы ксаш не качать тем, кому он не нужен:
C++ Source Code:
1 | extern unsigned int AllocateTextureIndex(void); //Это заголовок |
3 | unsigned int AllocateTextureIndex(void) |
5 | unsigned int id = pTexId++; |
7 | //This is a MEGA fix =) |
8 | //TODO: check on radeons |
9 | //if (glIsTexture(id)) glDeleteTextures(1, &id); |
В конце концов глоу заработал правильно. Только немного темноват. Профикшеный glow.cpp в аттаче.
-CJ- можешь связаться со мной по e-mail, у меня сейчас нет возможности быть подключенным к инету постоянно, поэтому и не пользуюсь аськой.
Отправлено FiEctro 22-11-2007 в 12:37:
Ku2zoff А почему глоу снова на 1/4 экрана ?
Добавлено 22-11-2007 в 15:33:
Ну 1/4 экрана я профиксил ( на твоём глоу ) ... Впринципе остался один баг ... Это пропадание оружия ...
Добавлено 22-11-2007 в 15:37:
Кстати еще вопрос ... Как сделать чтобы вместо мерцаний ( которые за гранью карты ) был обычный черный цвет ? А то глоу на этих мерцаниях ведет себя ужасно ...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Ku2zoff 22-11-2007 в 13:03:
-CJ- у меня глоу на весь экран, см. аттач. Не знаю почему. На первом скрине вариант с глоу а на втором без него. А твой код показывает не весь экран, а только левый нижний угол(причём растянутый на весь экран).
Что за пропадание оружия???
Не знаю как исправить мерцания через кодинг. Но есть один способ. Никаких мерцаний нет при использовании 3d sky
Отправлено FiEctro 22-11-2007 в 13:15:
>> Что за пропадание оружия???
ну при переходе скарты на карту иногда модель рук с пушкой пропадает ...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Ku2zoff 22-11-2007 в 13:29:
Очень странный глюк - никогда не было. А сама пушка есть и стрелять из неё мона? Или оружие вообще пропадает? А при смене на другое оружие что происходит?
Отправлено FiEctro 22-11-2007 в 13:55:
Да ... все работает как надо ... но модели нет ...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Ku2zoff 22-11-2007 в 16:35:
Столкнулся с небольшой проблемкой этого самого глоу. Когда добавляешь его в клиента, в котором есть ксашевские мониторы и зеркала, то зеркала перестают правильно отражать
, мониторам же нифига не делается. Решение проблемы в том, чтобы функция GL_VidInit(); находилась выше функции InitScreenGlow(); в int DLLEXPORT HUD_VidInit( void ):
C++ Source Code:
1 | int DLLEXPORT HUD_VidInit( void ) |
6 | GL_VidInit(); // глючит |
11 | -------------------------------------------------------------------------- |
13 | int DLLEXPORT HUD_VidInit( void ) |
17 | GL_VidInit(); // не глючит |
Дело в том, что в первом случае путаются проходы(viewport'ы) зеркал, т.к. инициализируются после проходов глоу.
Отправлено FiEctro 22-11-2007 в 16:58:
Ku2zoff незнаю у меня с зеркалами небыло никаких глюков ... А насчет пропадания модели пушки ... Попробуй черз консоль набрать следуещее
1 sv_cheats 1
2 map c2a5
3 impulse 101
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!