HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Как профиксить глоу ?
Или снова корявые ручки спиритовцев :b
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



Как профиксить глоу ?

Собсно сталкунулся с непонятнейшим и неприятнейшим багом со спиритовским глоу ( см. аттач ) ...
Сразу говорю дело !только! в коде глоу т.к. я тестил и с разными 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
}

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

[ Вложение ]
glow.jpg

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

Сообщить модератору | | IP: Записан
Сообщение: 22793

Старое сообщение 20-11-2007 17:49
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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

__________________

Сообщить модератору | | IP: Записан
Сообщение: 22794

Старое сообщение 20-11-2007 18:04
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



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

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

Сообщить модератору | | IP: Записан
Сообщение: 22795

Старое сообщение 20-11-2007 18:23
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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

__________________

Сообщить модератору | | IP: Записан
Сообщение: 22801

Старое сообщение 20-11-2007 20:17
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



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

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

Сообщить модератору | | IP: Записан
Сообщение: 22810

Старое сообщение 21-11-2007 09:21
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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

__________________

Сообщить модератору | | IP: Записан
Сообщение: 22816

Старое сообщение 21-11-2007 10:17
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



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

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

Сообщить модератору | | IP: Записан
Сообщение: 22817

Старое сообщение 21-11-2007 10:53
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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

__________________

Сообщить модератору | | IP: Записан
Сообщение: 22818

Старое сообщение 21-11-2007 11:15
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



XaeroX что конкретно ?

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

Сообщить модератору | | IP: Записан
Сообщение: 22821

Старое сообщение 21-11-2007 11:38
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Я так не разу у себя и не видел нормальный шейдерный glow. Всё смазывается и съезжает с экрана. Есть ли возможность использовать его совместно с зеркалами и мониторами без этого глюка?

Сообщить модератору | | IP: Записан
Сообщение: 22823

Старое сообщение 21-11-2007 12:54
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



>> без этого глюка?
Без размазаваний ? Да ...
Размазывания профикшены в коде выше ...

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

Сообщить модератору | | IP: Записан
Сообщение: 22824

Старое сообщение 21-11-2007 13:12
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



-CJ- у меня и с этого кода не пашет. Может дело в самих шейдерах?

Добавлено 21-11-2007 в 19:26:

Вот в аттаче вари ант с глоу и без него, причём на обоих скринах игрок смотрит в одну точку...

Вложение: glow_err.rar (37.2 кб)
Этот файл был скачан 352 раз.
ForestGirl проверилa это вложение на вирусы 21-11-2007 в 13:45

Сообщить модератору | | IP: Записан
Сообщение: 22826

Старое сообщение 21-11-2007 13:26
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
-CJ- писал:
что конкретно ?

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

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

__________________

Сообщить модератору | | IP: Записан
Сообщение: 22827

Старое сообщение 21-11-2007 13:29
-
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



>>Без размазаваний ? Да ... Размазывания профикшены в коде выше ...

Там вообще закомментирована часть кода, отвечающая за CG шейдеры и оставлен только ScreenGlowLowEnd, который и так без проблем работает, так что нифига не профикшено.

Я покопался в коде глоу и получил вот то что в аттаче. На четверть экрана работает идеально, но когда растягиваешь до полного размера - изображение искажается, понятия не имею из-за чего.

Вложение: glow_err2.rar (40.5 кб)
Этот файл был скачан 287 раз.
ForestGirl проверилa это вложение на вирусы 22-11-2007 в 01:33

Сообщить модератору | | IP: Записан
Сообщение: 22859

Старое сообщение 21-11-2007 19:32
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



>> Там вообще закомментирована часть кода, отвечающая за CG шейдеры и оставлен только ScreenGlowLowEnd, который и так без проблем работает, так что нифига не профикшено.

Блин я для кого писал ? Что эта большая часть закоментирована только из за глюка форума ! В студии все ОК ...
Кстати как с тобой вообще я могу связаться ? В аське тебя вообще не бывает ...

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

Сообщить модератору | | IP: Записан
Сообщение: 22868

Старое сообщение 22-11-2007 11:16
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 15:25. Новая тема    Ответить
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Как профиксить глоу ?
Или снова корявые ручки спиритовцев :b
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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