1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
/* bzflag
* Copyright (c) 1993-2025 Tim Riker
*
* This package is free software; you can redistribute it and/or
* modify it under the terms of the license found in the file
* named COPYING that should have accompanied this file.
*
* THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
/* OpenGLLight:
* Encapsulates an OpenGL (point or directional) light source.
*/
#ifndef BZF_OPENGL_LIGHT_H
#define BZF_OPENGL_LIGHT_H
// common goes first
#include "common.h"
// system headers
#include <vector>
// common headers
#include "bzfgl.h"
#include "ViewFrustum.h"
class OpenGLLight
{
public:
OpenGLLight();
OpenGLLight(const OpenGLLight&);
~OpenGLLight();
OpenGLLight& operator=(const OpenGLLight&);
const GLfloat* getPosition() const;
const GLfloat* getColor() const;
const GLfloat* getAttenuation() const;
GLfloat getMaxDist() const;
void setDirection(const GLfloat* xyz);
void setPosition(const GLfloat* xyz);
void setColor(GLfloat r, GLfloat g, GLfloat b);
void setColor(const GLfloat* rgb);
void setAttenuation(const GLfloat* clq);
void setAttenuation(int index, GLfloat value);
void calculateImportance(const ViewFrustum& frustum);
GLfloat getImportance() const;
void setOnlyReal(bool value);
bool getOnlyReal() const;
void setOnlyGround(bool value);
bool getOnlyGround() const;
void execute(int index, bool useList) const;
static GLint getMaxLights();
static void enableLight(int index, bool on); // const
protected:
void makeLists();
void freeLists();
void genLight(GLenum light) const;
private:
static void freeContext(void*);
static void initContext(void*);
private:
GLfloat pos[4];
GLfloat color[4];
GLfloat atten[3];
GLfloat maxDist;
GLfloat importance;
bool onlyReal;
bool onlyGround;
GLuint* lists;
static GLint maxLights;
};
//
// OpenGLLight
//
inline const GLfloat* OpenGLLight::getPosition() const
{
return pos;
}
inline const GLfloat* OpenGLLight::getColor() const
{
return color;
}
inline const GLfloat* OpenGLLight::getAttenuation() const
{
return atten;
}
inline GLfloat OpenGLLight::getMaxDist() const
{
return maxDist;
}
inline GLfloat OpenGLLight::getImportance() const
{
return importance;
}
inline bool OpenGLLight::getOnlyReal() const
{
return onlyReal;
}
inline bool OpenGLLight::getOnlyGround() const
{
return onlyGround;
}
#endif // BZF_OPENGL_LIGHT_H
// Local Variables: ***
// mode: C++ ***
// tab-width: 4 ***
// c-basic-offset: 4 ***
// indent-tabs-mode: nil ***
// End: ***
// ex: shiftwidth=4 tabstop=4
|