HLFX.Ru Forum
Показать все 23 сообщений этой темы на одной странице

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"
2
 
3
extern engine_studio_api_t IEngineStudio;
4
 
5
 
6
bool bGlowShaderInitialised = false;
7
bool bGlowLowEndInitialised = false;
8
 
9
CGcontext g_cgContext;
10
CGprofile g_cgVertProfile;
11
CGprofile g_cgFragProfile;
12
 
13
CGprogram g_cgVP_GlowDarken;
14
CGprogram g_cgFP_GlowDarken;
15
 
16
CGprogram g_cgVP_GlowBlur;
17
CGprogram g_cgFP_GlowBlur;
18
 
19
CGprogram g_cgVP_GlowCombine;
20
CGprogram g_cgFP_GlowCombine;
21
 
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;
27
 
28
unsigned int g_uiSceneTex;
29
unsigned int g_uiBlurTex;
30
 
31
// TEXTURES
32
unsigned int g_uiScreenTex = 0;
33
unsigned int g_uiGlowTex = 0;
34
 
35
// FUNCTIONS
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);
43
 
44
 
45
void DrawQuad(int width, int height, int ofsX = 0, int ofsY = 0)
46
{
47
 
48
  glBegin(GL_QUADS);
49
 
50
  glTexCoord2f(ofsX,ofsY);
51
  glVertex3f(0, 1, -1);
52
  glTexCoord2f(ofsX,height+ofsY);
53
  glVertex3f(0, 0, -1);
54
  glTexCoord2f(width+ofsX,height+ofsY);
55
  glVertex3f(1, 0, -1);
56
  glTexCoord2f(width+ofsX,ofsY);
57
  glVertex3f(1, 1, -1);
58
 
59
  glEnd();
60
}
61
 
62
void RenderScreenGlow()
63
{
64
  if (IEngineStudio.IsHardware() != 1)
65
    return;
66
 
67
  if (CVAR_GET_FLOAT("r_glow") == 0)	 //check the cvar for the glow is on.
68
    return;
69
 
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
72
}
73
 
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
76
}
77
}
78
 
79
void InitScreenGlow()
80
{
81
  if (IEngineStudio.IsHardware() != 1)
82
    return;
83
 
84
  if (CVAR_GET_FLOAT("r_glow") == 0)
85
    return;
86
 
87
  if (CVAR_GET_FLOAT("r_glow") == 1){
88
    InitScreenGlowShader();	//AJH don't need r_glowmode, use r_glow 0/1/2 instead
89
 
90
  }
91
  else if (CVAR_GET_FLOAT("r_glow") == 2){
92
    InitScreenGlowLowEnd();	//AJH don't need r_glowmode, use r_glow 0/1/2 instead
93
  }
94
}
95
//END glow effect functions -- FragBait0
96
 
97
//START shader glow effect -- FragBait0
98
inline bool LoadProgram(CGprogram* pDest, CGprofile profile, const char* szFile)
99
{
100
  const char* szGameDir = gEngfuncs.pfnGetGameDirectory();
101
  char file[512];
102
  sprintf(file, "%s/%s", szGameDir, szFile);
103
 
104
  *pDest = cgCreateProgramFromFile(g_cgContext, CG_SOURCE, file, profile, "main", 0);
105
  if (!(*pDest)) {
106
    MessageBox(NULL, cgGetErrorString(cgGetError()), NULL, NULL);
107
    return false;
108
  }
109
 
110
  cgGLLoadProgram(*pDest);
111
 
112
  return true;
113
}
114
 
115
void InitScreenGlowShader(void)
116
{
117
  bGlowShaderInitialised = false;
118
  // OPENGL EXTENSION LOADING
119
  glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)wglGetProcAddress("glActiveTextureARB");
120
 
121
  // TEXTURE CREATION
122
  unsigned char* pBlankTex = new unsigned char[ScreenWidth*ScreenHeight*3];
123
  memset(pBlankTex, 0, ScreenWidth*ScreenHeight*3);
124
 
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);
130
 
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);
136
 
137
  delete[] pBlankTex;
138
 
139
  // CG INITIALISATION
140
  g_cgContext = cgCreateContext();
141
  if (!g_cgContext) {
142
    MessageBox(NULL, "Couldn't make Cg context", NULL, NULL);
143
    return;
144
  }
145
 
146
  // VERTEX PROFILE
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);
150
    return;
151
  }
152
 
153
  cgGLSetOptimalOptions(g_cgVertProfile);
154
 
155
  // VP LOADING
156
  if (!LoadProgram(&g_cgVP_GlowDarken, g_cgVertProfile, "cg/glow_darken_vp.cg"))
157
    return;
158
 
159
  if (!LoadProgram(&g_cgVP_GlowBlur, g_cgVertProfile, "cg/glow_blur_vp.cg"))
160
    return;
161
 
162
  if (!LoadProgram(&g_cgVP_GlowCombine, g_cgVertProfile, "cg/glow_combine_vp.cg"))
163
    return;
164
 
165
  // VP PARAM GRABBING
166
  g_cgpVP0_ModelViewMatrix = cgGetNamedParameter(g_cgVP_GlowDarken, "ModelViewProj");
167
 
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");
171
 
172
  g_cgpVP2_ModelViewMatrix = cgGetNamedParameter(g_cgVP_GlowCombine, "ModelViewProj");
173
 
174
  // FRAGMENT PROFILE
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);
178
    return;
179
  }
180
 
181
  cgGLSetOptimalOptions(g_cgFragProfile);
182
 
183
  // FP LOADING
184
  if (!LoadProgram(&g_cgFP_GlowDarken, g_cgFragProfile, "cg/glow_darken_fp.cg"))
185
    return;
186
 
187
  if (!LoadProgram(&g_cgFP_GlowBlur, g_cgFragProfile, "cg/glow_blur_fp.cg"))
188
    return;
189
 
190
  if (!LoadProgram(&g_cgFP_GlowCombine, g_cgFragProfile, "cg/glow_combine_fp.cg"))
191
    return;
192
 
193
  bGlowShaderInitialised = true;
194
}
195
 
196
void DoBlur(unsigned int uiSrcTex, unsigned int uiTargetTex, int srcTexWidth, int srcTexHeight, int destTexWidth, int destTexHeight, float xofs, float yofs)
197
{
198
  cgGLBindProgram(g_cgVP_GlowBlur);
199
  cgGLBindProgram(g_cgFP_GlowBlur);
200
 
201
  glActiveTextureARB(GL_TEXTURE0_ARB);
202
  glEnable(GL_TEXTURE_RECTANGLE_NV);
203
  glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiSrcTex);
204
 
205
  glActiveTextureARB(GL_TEXTURE1_ARB);
206
  glEnable(GL_TEXTURE_RECTANGLE_NV);
207
  glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiSrcTex);
208
 
209
  glActiveTextureARB(GL_TEXTURE2_ARB);
210
  glEnable(GL_TEXTURE_RECTANGLE_NV);
211
  glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiSrcTex);
212
 
213
  glActiveTextureARB(GL_TEXTURE3_ARB);
214
  glEnable(GL_TEXTURE_RECTANGLE_NV);
215
  glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiSrcTex);
216
 
217
  cgGLSetParameter1f(g_cgpVP1_XOffset, xofs);
218
  cgGLSetParameter1f(g_cgpVP1_YOffset, yofs);
219
 
220
  glViewport(0, 0, destTexWidth, destTexHeight);
221
 
222
  DrawQuad(srcTexWidth, srcTexHeight);
223
 
224
  glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiTargetTex);
225
  glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, destTexWidth, destTexHeight, 0);
226
}
227
 
228
void RenderScreenGlowShader(void)
229
{
230
 
231
  // check to see if we can render it.
232
  if (IEngineStudio.IsHardware() != 1){
233
    return;
234
  }
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)
238
           return;
239
  */
240
  */
241
  //if the mode isn't shader then return.
242
    if (CVAR_GET_FLOAT("r_glow") != 1)
243
      return;
244
 
245
  if (!bGlowShaderInitialised)
246
    InitScreenGlowShader();
247
 
248
  if (!bGlowShaderInitialised){ //if the initialisation dosent work for some reason
249
    gEngfuncs.Cvar_SetValue( "r_glow", 0 );
250
  return;
251
}
252
 
253
// STEP 1: Grab the screen and put it into a texture
254
glActiveTextureARB(GL_TEXTURE0_ARB);
255
glEnable(GL_TEXTURE_RECTANGLE_NV);
256
 
257
glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex);
258
glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth, ScreenHeight, 0);
259
 
260
// STEP 2: Set up an orthogonal projection
261
glMatrixMode(GL_MODELVIEW);
262
glPushMatrix();
263
glLoadIdentity();
264
 
265
glMatrixMode(GL_PROJECTION);
266
glPushMatrix();
267
glLoadIdentity();
268
glOrtho(0, 1, 1, 0, 0.1, 100);
269
 
270
glColor3f(1,1,1);
271
 
272
// STEP 3: Initialize Cg programs and parameters for darken
273
cgGLEnableProfile(g_cgVertProfile);
274
cgGLEnableProfile(g_cgFragProfile);
275
 
276
cgGLBindProgram(g_cgVP_GlowDarken);
277
cgGLBindProgram(g_cgFP_GlowDarken);
278
 
279
cgGLSetStateMatrixParameter(g_cgpVP0_ModelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
280
 
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);
284
 
285
glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex);
286
 
287
DrawQuad(ScreenWidth, ScreenHeight);
288
 
289
glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiBlurTex);
290
glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth/4, ScreenHeight/4, 0);
291
 
292
// STEP 5: Initialise Cg programs and parameters for blurring
293
cgGLBindProgram(g_cgVP_GlowBlur);
294
cgGLBindProgram(g_cgFP_GlowBlur);
295
 
296
cgGLSetStateMatrixParameter(g_cgpVP1_ModelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
297
 
298
// STEP 6: Apply blur
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);
303
}
304
 
305
// STEP 7: Set up Cg for combining blurred glow with original scene
306
cgGLBindProgram(g_cgVP_GlowCombine);
307
cgGLBindProgram(g_cgFP_GlowCombine);
308
 
309
cgGLSetStateMatrixParameter(g_cgpVP2_ModelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
310
 
311
glActiveTextureARB(GL_TEXTURE0_ARB);
312
glEnable(GL_TEXTURE_RECTANGLE_NV);
313
glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex);
314
 
315
glActiveTextureARB(GL_TEXTURE1_ARB);
316
glEnable(GL_TEXTURE_RECTANGLE_NV);
317
glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiBlurTex);
318
 
319
// STEP 8: Do the combination, rendering to the screen without grabbing it to a texture
320
glViewport(0, 0, ScreenWidth, ScreenHeight);
321
 
322
DrawQuad(ScreenWidth/4, ScreenHeight/4);
323
 
324
// STEP 9: Restore the original projection and modelview matrices and disable rectangular textures on all units
325
glMatrixMode(GL_PROJECTION);
326
glPopMatrix();
327
 
328
glMatrixMode(GL_MODELVIEW);
329
glPopMatrix();
330
 
331
cgGLDisableProfile(g_cgVertProfile);
332
cgGLDisableProfile(g_cgFragProfile);
333
 
334
glActiveTextureARB(GL_TEXTURE0_ARB);
335
glDisable(GL_TEXTURE_RECTANGLE_NV);
336
 
337
glActiveTextureARB(GL_TEXTURE1_ARB);
338
glDisable(GL_TEXTURE_RECTANGLE_NV);
339
 
340
glActiveTextureARB(GL_TEXTURE2_ARB);
341
glDisable(GL_TEXTURE_RECTANGLE_NV);
342
 
343
glActiveTextureARB(GL_TEXTURE3_ARB);
344
glDisable(GL_TEXTURE_RECTANGLE_NV);
345
 
346
glActiveTextureARB(GL_TEXTURE0_ARB);
347
glClear(GL_DEPTH_BUFFER_BIT);
348
}
349
//END shader glow effect --FragBait0
350
 
351
//START lowend glow effect --FragBait0
352
void InitScreenGlowLowEnd(void)
353
{
354
  bGlowLowEndInitialised = false;
355
 
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);
359
 
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);
366
 
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);
373
 
374
  // free the memory
375
  delete[] pBlankTex;
376
 
377
  bGlowLowEndInitialised = true;
378
}
379
 
380
void RenderScreenGlowLowEnd(void)
381
{
382
 
383
  // check to see if we can render it.
384
  if (IEngineStudio.IsHardware() != 1){
385
    return;
386
  }
387
 
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)
391
            return;
392
  */
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
395
    return;
396
 
397
  if (!bGlowLowEndInitialised)
398
    InitScreenGlowLowEnd();
399
 
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.
402
  return;
403
}
404
// enable some OpenGL stuff
405
glEnable(GL_TEXTURE_RECTANGLE_NV);
406
glColor3f(1,1,1);
407
glDisable(GL_DEPTH_TEST);
408
 
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);
412
 
413
// STEP 2: Set up an orthogonal projection
414
glMatrixMode(GL_MODELVIEW);
415
glPushMatrix();
416
glLoadIdentity();
417
 
418
glMatrixMode(GL_PROJECTION);
419
glPushMatrix();
420
glLoadIdentity();
421
glOrtho(0, 1, 1, 0, 0.1, 100);
422
 
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);
426
 
427
glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiScreenTex);
428
 
429
glBlendFunc(GL_DST_COLOR, GL_ZERO);
430
 
431
glDisable(GL_BLEND);
432
 
433
DrawQuad(ScreenWidth, ScreenHeight);
434
 
435
glEnable(GL_BLEND);
436
 
437
for (int i = 0; i < CVAR_GET_FLOAT("r_glowdark"); i++)
438
  DrawQuad(ScreenWidth, ScreenHeight);
439
 
440
glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiGlowTex);
441
glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth/4, ScreenHeight/4, 0);
442
 
443
// STEP 4: Blur the now darkened scene in the horizontal direction.
444
float blurAlpha = 1 / (CVAR_GET_FLOAT("r_glowblur")*2 + 1);
445
 
446
glColor4f(1,1,1,blurAlpha);
447
 
448
glBlendFunc(GL_SRC_ALPHA, GL_ZERO);
449
 
450
DrawQuad(ScreenWidth/4, ScreenHeight/4);
451
 
452
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
453
 
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);
457
}
458
 
459
glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth/4, ScreenHeight/4, 0);
460
 
461
// STEP 5: Blur the horizontally blurred image in the vertical direction.
462
glBlendFunc(GL_SRC_ALPHA, GL_ZERO);
463
 
464
DrawQuad(ScreenWidth/4, ScreenHeight/4);
465
 
466
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
467
 
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);
471
}
472
 
473
glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth/4, ScreenHeight/4, 0);
474
 
475
// STEP 6: Combine the blur with the original image.
476
glViewport(0, 0, ScreenWidth, ScreenHeight);
477
 
478
glDisable(GL_BLEND);
479
 
480
DrawQuad(ScreenWidth/4, ScreenHeight/4);
481
 
482
glEnable(GL_BLEND);
483
glBlendFunc(GL_ONE, GL_ONE);
484
 
485
for (i = 0; i < CVAR_GET_FLOAT("r_glowstrength"); i++) {
486
  DrawQuad(ScreenWidth/4, ScreenHeight/4);
487
}
488
 
489
glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiScreenTex);
490
 
491
DrawQuad(ScreenWidth, ScreenHeight);
492
 
493
// STEP 7: Restore the original projection and modelview matrices and disable rectangular textures.
494
glMatrixMode(GL_PROJECTION);
495
glPopMatrix();
496
 
497
glMatrixMode(GL_MODELVIEW);
498
glPopMatrix();
499
 
500
glDisable(GL_TEXTURE_RECTANGLE_NV);
501
glEnable(GL_DEPTH_TEST);
502
glDisable(GL_BLEND);
503
glClear(GL_DEPTH_BUFFER_BIT);
504
 
505
}

В середине чтото коментарии както криво получились ... На самом деле в коде не так ...
Заранее благодарен ...
З.Ы. что интересное глюк проявляется не сразу ( обычно начинается с неправильного скейла в аномальных лабораториях ... И беспределом перед входом в офис ...

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 20-11-2007 в 18:04:

После смены уровня глюки, что ли? Или через некоторое время на том же уровне?

__________________

xaerox on Vivino


Отправлено FiEctro 20-11-2007 в 18:23:

>> После смены уровня глюки, что ли?
Ну да ...

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 20-11-2007 в 20:17:

-CJ- так эти глюки и в спирите были. Это проблема очень многих модов, использующих OpenGL-эффекты

__________________

xaerox on Vivino


Отправлено FiEctro 21-11-2007 в 09:21:

XaeroX дык как это фиксить ?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 21-11-2007 в 10:17:

-CJ- надо избавляться от glGenTextures. Посмотри как в сорцах ксаша делается, там чтото типа GL_AllocateTextureIndex или навроде того.

__________________

xaerox on Vivino


Отправлено FiEctro 21-11-2007 в 10:53:

XaeroX в ксаше помоему нету глоу ...

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 21-11-2007 в 11:15:

-CJ- ну и что? Там текстуры создаются. Вот и посмотри, как там делается.

__________________

xaerox on Vivino


Отправлено 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 или навроде того

Почему по два раза писать надо-то?

__________________

xaerox on Vivino


Отправлено 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); //Это заголовок
2
 
3
unsigned int AllocateTextureIndex(void)
4
{
5
  unsigned int id = pTexId++;
6
 
7
  //This is a MEGA fix =)
8
  //TODO: check on radeons
9
  //if (glIsTexture(id)) glDeleteTextures(1, &id);
10
 
11
  return id;
12
}


В конце концов глоу заработал правильно. Только немного темноват. Профикшеный 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 )
2
{
3
  gHUD.VidInit();
4
  VGui_Startup();
5
  InitScreenGlow();
6
  GL_VidInit(); // глючит
7
 
8
  return 1;
9
}
10
 
11
--------------------------------------------------------------------------
12
 
13
int DLLEXPORT HUD_VidInit( void )
14
{
15
  gHUD.VidInit();
16
  VGui_Startup();
17
  GL_VidInit(); // не глючит
18
  InitScreenGlow();
19
 
20
  return 1;
21
}


Дело в том, что в первом случае путаются проходы(viewport'ы) зеркал, т.к. инициализируются после проходов глоу.


Отправлено FiEctro 22-11-2007 в 16:58:

Ku2zoff незнаю у меня с зеркалами небыло никаких глюков ... А насчет пропадания модели пушки ... Попробуй черз консоль набрать следуещее
1 sv_cheats 1
2 map c2a5
3 impulse 101

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Временная зона GMT. Текущее время 21:17.
Показать все 23 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024