// Filename: videoTexture.I // Created by: drose (21Sep05) // //////////////////////////////////////////////////////////////////// // // PANDA 3D SOFTWARE // Copyright (c) Carnegie Mellon University. All rights reserved. // // All use of this software is subject to the terms of the revised BSD // license. You should have received a copy of this license along // with this source code in a file named "LICENSE." // //////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// // Function: VideoTexture::get_video_width // Access: Published // Description: Returns the width in texels of the source video // stream. This is not necessarily the width of the // actual texture, since the texture may have been // expanded to raise it to a power of 2. //////////////////////////////////////////////////////////////////// INLINE int VideoTexture:: get_video_width() const { return _video_width; } //////////////////////////////////////////////////////////////////// // Function: VideoTexture::get_video_height // Access: Published // Description: Returns the height in texels of the source video // stream. This is not necessarily the height of the // actual texture, since the texture may have been // expanded to raise it to a power of 2. //////////////////////////////////////////////////////////////////// INLINE int VideoTexture:: get_video_height() const { return _video_height; } //////////////////////////////////////////////////////////////////// // Function: VideoTexture::get_tex_scale // Access: Published // Description: Returns a scale pair that is suitable for applying to // geometry via NodePath::set_tex_scale(), which will // convert texture coordinates on the geometry from the // range 0..1 into the appropriate range to render the // video part of the texture. // // This is necessary in the event the video source is // not a power of two and set_power_2() is true. In // this case, the video image will be mapped to the // lower-left corner of the texture, and the rest of the // texture space will be unused; so we will need to // remap any texture coordinates to fill the space // correctly. //////////////////////////////////////////////////////////////////// INLINE LVecBase2f VideoTexture:: get_tex_scale() const { if (_video_width == 0 || _video_height == 0 || _x_size == 0 || _y_size == 0) { LVecBase2f(1.0f, 1.0f); } return LVecBase2f((float)_video_width / _x_size, (float)_video_height / _y_size); } //////////////////////////////////////////////////////////////////// // Function: VideoTexture::set_video_size // Access: Protected // Description: Should be called by a derived class to set the size // of the video when it is loaded. //////////////////////////////////////////////////////////////////// INLINE void VideoTexture:: set_video_size(int video_width, int video_height) { _video_width = video_width; _video_height = video_height; } //////////////////////////////////////////////////////////////////// // Function: VideoTexture::consider_update // Access: Protected // Description: Calls update_frame() if the current frame has // changed. //////////////////////////////////////////////////////////////////// INLINE void VideoTexture:: consider_update() { int this_frame = ClockObject::get_global_clock()->get_frame_count(); if (this_frame != _last_frame_update) { int frame = get_frame(); if (_current_frame != frame) { update_frame(frame); _current_frame = frame; } _last_frame_update = this_frame; } } //////////////////////////////////////////////////////////////////// // Function: VideoTexture::clear_current_frame // Access: Protected // Description: Resets the record of the current frame so that it // will be forced to reload the next time it is // requested. //////////////////////////////////////////////////////////////////// INLINE void VideoTexture:: clear_current_frame() { _last_frame_update = 0; _current_frame = -1; }