1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-01-23 08:52:10 +01:00

154 lines
4.5 KiB
C++

/****************************************************************************
This file is part of the GLC-lib library.
Copyright (C) 2005-2008 Laurent Ribon (laumaya@users.sourceforge.net)
http://glc-lib.sourceforge.net
GLC-lib is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
GLC-lib is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with GLC-lib; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
//! \file glc_global.h provide usefull utilities
#ifndef GLC_GLOBAL_H_
#define GLC_GLOBAL_H_
#include <QMutex>
#include <QtOpenGL>
#include <QList>
#include <QVector>
#include <QHash>
#include "glc_config.h"
// GLC_lib typedef
//! Type used for all GLC_lib ID
typedef unsigned int GLC_uint;
//! Types used for Bulk Opengl Data : QVector of GLfloat
typedef QVector<GLfloat> GLfloatVector;
//! Types used for index Opengl Data : QVector of GLuint
typedef QVector<GLuint> GLuintVector;
typedef QList<GLuint> IndexList;
typedef QVector<GLsizei> IndexSizes;
typedef QVector<GLvoid*> OffsetVector;
typedef QVector<GLuint> OffsetVectori;
namespace glc
{
//! Simple ID generation
GLC_LIB_EXPORT GLC_uint GLC_GenID();
//! Simple Geom ID generation
GLC_LIB_EXPORT GLC_uint GLC_GenGeomID();
//! Simple User ID generation
GLC_LIB_EXPORT GLC_uint GLC_GenUserID();
//! Simple 3D widget ID generation
GLC_LIB_EXPORT GLC_uint GLC_Gen3DWidgetID();
//! Simple shading group generation
GLC_LIB_EXPORT GLC_uint GLC_GenShaderGroupID();
//! Return the GLC_uint decoded ID from RGB encoded ID
inline GLC_uint decodeRgbId(const GLubyte*);
//! Return the encoded color of the id
inline void encodeRgbId(GLC_uint, GLubyte*);
const int GLC_DISCRET= 70;
const int GLC_POLYDISCRET= 60;
extern QMutex iDMutex;
extern QMutex geomIdMutex;
extern QMutex userIdMutex;
extern QMutex widget3dIdMutex;
extern QMutex shadingGroupIdMutex;
//! 3D widget event flag
enum WidgetEventFlag
{
AcceptEvent,
IgnoreEvent,
BlockedEvent
};
//! Return GLC_lib Archive prefix string
GLC_LIB_EXPORT const QString archivePrefix();
//! Return GLC_lib Archive infix string
GLC_LIB_EXPORT const QString archiveInfix();
//! Return GLC_lib File prefix string
GLC_LIB_EXPORT const QString filePrefix();
//! Return GLC_lib File infix string
GLC_LIB_EXPORT const QString fileInfix();
//! Return true if the given file name is in a archive string
GLC_LIB_EXPORT bool isArchiveString(const QString& fileName);
//! Return true if the given file name is in a File string
GLC_LIB_EXPORT bool isFileString(const QString& fileName);
//! Return archive string form the given archive fileName and fileName entry
GLC_LIB_EXPORT QString builtArchiveString(const QString& Archive, const QString& entry);
//! Return archive string form the given archive fileName and fileName entry
GLC_LIB_EXPORT QString builtFileString(const QString& File, const QString& entry);
//! Return Archive filename from the given archive string
GLC_LIB_EXPORT QString archiveFileName(const QString& archiveString);
//! Return Archive entry filname from the given archive string
GLC_LIB_EXPORT QString archiveEntryFileName(const QString& archiveString);
// GLC_Lib version
const QString version("2.2.0");
const QString description("GLC_lib is a Open Source C++ class library that enables the quick creation of an OpenGL application based on QT4.");
};
// Return the GLC_uint decoded ID from RGBA encoded ID
GLC_uint glc::decodeRgbId(const GLubyte* pcolorId)
{
GLC_uint returnId= 0;
returnId|= (GLC_uint)pcolorId[0] << (0 * 8);
returnId|= (GLC_uint)pcolorId[1] << (1 * 8);
returnId|= (GLC_uint)pcolorId[2] << (2 * 8);
// Only get first 24 bits
//returnId|= (GLC_uint)pcolorId[3] << (3 * 8);
return returnId;
}
// Encode Id to RGBA color
void glc::encodeRgbId(GLC_uint id, GLubyte* colorId)
{
colorId[0]= static_cast<GLubyte>((id >> (0 * 8)) & 0xFF);
colorId[1]= static_cast<GLubyte>((id >> (1 * 8)) & 0xFF);
colorId[2]= static_cast<GLubyte>((id >> (2 * 8)) & 0xFF);
colorId[3]= static_cast<GLubyte>((id >> (3 * 8)) & 0xFF);
}
#endif //GLC_GLOBAL_H_