GPUCommand
-
class GPUCommand
This class can be seen like a packet, to be transferred to the GPU. It has a command type, which tells the GPU what to do once it recieved this “packet”. It stores a limited amount of floating point components.
Inheritance diagram
-
enum CommandType
The different types of
GPUCommands
. Each type has a special case in the command queue processor. When adding new types, those need to be handled in the command target, too.-
enumerator CMD_invalid = 0
-
enumerator CMD_store_light = 1
-
enumerator CMD_remove_light = 2
-
enumerator CMD_store_source = 3
-
enumerator CMD_remove_sources = 4
-
enumerator CMD_invalid = 0
-
GPUCommand(GPUCommand::CommandType command_type)
-
GPUCommand(GPUCommand const&) = default
This will construct a new
GPUCommand
of the given command type. The command type should be ofGPUCommand::CommandType
, and determines what data theGPUCommand
contains, and how it will be handled.
-
bool get_uses_integer_packing(void)
This returns how integer are packed into the data stream. If the returned value is true, then integers are packed using their binary representation converted to floating point format. If the returned value is false, then integers are packed by simply casting them to float, e.g. val = (float)i;
-
void push_float(float v)
This adds an integer to the back of the
GPUCommand
. Its used by all other push_xxx methods, and simply stores the value, then increments the write pointer. When the amount of floats exceeds the capacity of theGPUCommand
, an error will be printed, and the method returns without doing anything else.
-
void push_int(int v)
This adds an integer to the back of the
GPUCommand
. Depending on the setting in convert_int_to_float, this will either just convert the int to a float by casting it, or just do a bitwise copy.
-
void push_mat3(LMatrix3 const &v)
This appends a floating point 3x3 matrix to the
GPUCommand
, by pushing all components in row-order to the command. This occupies a space of 9 floats.
-
void push_mat4(LMatrix4 const &v)
This appends a floating point 4x4 matrix to the
GPUCommand
, by pushing all components in row-order to the command. This occupies a space of 16 floats.
-
void push_vec3(LVecBase3i const &v)
This appends a 3-component floating point vector to the command. It basically just calls
push_float()
for every component, in the order x, y, z, which causes the vector to occupy the space of 3 floats.This appends a 3-component integer vector to the command. It basically just calls
push_int()
for every component, in the order x, y, z, which causes the vector to occupy the space of 3 floats.
-
void push_vec4(LVecBase4i const &v)
This appends a 4-component floating point vector to the command. It basically just calls
push_float()
for every component, in the order x, y, z, which causes the vector to occupy the space of 3 floats.This appends a 4-component integer vector to the command. It basically just calls
push_int()
for every component, in the order x, y, z, w, which causes the vector to occupy the space of 4 floats.
-
void write(std::ostream &out) const
This method prints the type, size, and data of the
GPUCommand
to the console. This helps for debugging the contents of theGPUCommand
. Keep in mind that integers might be shown in their binary float representation, depending on the setting in the GPUCommand::convert_int_to_float method.
-
void write_to(PTA_uchar const &dest, std::size_t command_index)
This method writes all the data of the GPU command to a given target. The target should be a pointer to memory being big enough to hold the data. Presumably #dest will be a handle to texture memory. The command_index controls the offset where the data will be written to.
its data to command_index * GPU_COMMAND_ENTRIES. When writing the
GPUCommand
in aGPUCommandList
, the command_index will most likely be the index of the command in the list.
-
enum CommandType