Initial pass at getting a list of viewer objects with non-null material IDs.
parent
002a54f779
commit
38a565f71a
|
|
@ -20,6 +20,7 @@ include_directories(
|
|||
)
|
||||
|
||||
set(llprimitive_SOURCE_FILES
|
||||
llmaterialid.cpp
|
||||
llmaterialtable.cpp
|
||||
llmediaentry.cpp
|
||||
llmodel.cpp
|
||||
|
|
@ -37,6 +38,7 @@ set(llprimitive_HEADER_FILES
|
|||
CMakeLists.txt
|
||||
|
||||
legacy_object_types.h
|
||||
llmaterialid.h
|
||||
llmaterialtable.h
|
||||
llmediaentry.h
|
||||
llmodel.h
|
||||
|
|
|
|||
|
|
@ -0,0 +1,112 @@
|
|||
/**
|
||||
* @file llmaterialid.cpp
|
||||
* @brief Implementation of llmaterialid
|
||||
* @author Stinson@lindenlab.com
|
||||
*
|
||||
* $LicenseInfo:firstyear=2012&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2012, Linden Research, Inc.
|
||||
*
|
||||
* This library 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;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library 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 this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "linden_common.h"
|
||||
|
||||
#include "llmaterialid.h"
|
||||
|
||||
const LLMaterialID LLMaterialID::null;
|
||||
|
||||
LLMaterialID::LLMaterialID()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
LLMaterialID::LLMaterialID(const LLSD& pMaterialID)
|
||||
{
|
||||
llassert(pMaterialID.isBinary());
|
||||
parseFromBinary(pMaterialID.asBinary());
|
||||
}
|
||||
|
||||
LLMaterialID::LLMaterialID(const LLSD::Binary& pMaterialID)
|
||||
{
|
||||
parseFromBinary(pMaterialID);
|
||||
}
|
||||
|
||||
LLMaterialID::LLMaterialID(const LLMaterialID& pOtherMaterialID)
|
||||
{
|
||||
copyFromOtherMaterialID(pOtherMaterialID);
|
||||
}
|
||||
|
||||
LLMaterialID::~LLMaterialID()
|
||||
{
|
||||
}
|
||||
|
||||
bool LLMaterialID::operator == (const LLMaterialID& pOtherMaterialID) const
|
||||
{
|
||||
return (compareToOtherMaterialID(pOtherMaterialID) == 0);
|
||||
}
|
||||
|
||||
bool LLMaterialID::operator != (const LLMaterialID& pOtherMaterialID) const
|
||||
{
|
||||
return (compareToOtherMaterialID(pOtherMaterialID) != 0);
|
||||
}
|
||||
|
||||
LLMaterialID& LLMaterialID::operator = (const LLMaterialID& pOtherMaterialID)
|
||||
{
|
||||
copyFromOtherMaterialID(pOtherMaterialID);
|
||||
return (*this);
|
||||
}
|
||||
|
||||
bool LLMaterialID::isNull() const
|
||||
{
|
||||
return (compareToOtherMaterialID(LLMaterialID::null) == 0);
|
||||
}
|
||||
|
||||
const U8* LLMaterialID::get() const
|
||||
{
|
||||
return mID;
|
||||
}
|
||||
|
||||
void LLMaterialID::set(const void* pMemory)
|
||||
{
|
||||
llassert(pMemory != NULL);
|
||||
|
||||
// assumes that the required size of memory is available
|
||||
memcpy(mID, pMemory, MATERIAL_ID_SIZE * sizeof(U8));
|
||||
}
|
||||
|
||||
void LLMaterialID::clear()
|
||||
{
|
||||
memset(mID, 0, MATERIAL_ID_SIZE * sizeof(U8));
|
||||
}
|
||||
|
||||
void LLMaterialID::parseFromBinary (const LLSD::Binary& pMaterialID)
|
||||
{
|
||||
llassert(pMaterialID.size() == (MATERIAL_ID_SIZE * sizeof(U8)));
|
||||
memcpy(mID, &pMaterialID[0], MATERIAL_ID_SIZE * sizeof(U8));
|
||||
}
|
||||
|
||||
void LLMaterialID::copyFromOtherMaterialID(const LLMaterialID& pOtherMaterialID)
|
||||
{
|
||||
memcpy(mID, pOtherMaterialID.mID, MATERIAL_ID_SIZE * sizeof(U8));
|
||||
}
|
||||
|
||||
int LLMaterialID::compareToOtherMaterialID(const LLMaterialID& pOtherMaterialID) const
|
||||
{
|
||||
return memcmp(mID, pOtherMaterialID.mID, MATERIAL_ID_SIZE * sizeof(U8));
|
||||
}
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
/**
|
||||
* @file llmaterialid.h
|
||||
* @brief Header file for llmaterialid
|
||||
* @author Stinson@lindenlab.com
|
||||
*
|
||||
* $LicenseInfo:firstyear=2012&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2012, Linden Research, Inc.
|
||||
*
|
||||
* This library 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;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library 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 this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
#ifndef LL_LLMATERIALID_H
|
||||
#define LL_LLMATERIALID_H
|
||||
|
||||
#define MATERIAL_ID_SIZE 16
|
||||
|
||||
class LLMaterialID
|
||||
{
|
||||
public:
|
||||
LLMaterialID();
|
||||
LLMaterialID(const LLSD& pMaterialID);
|
||||
LLMaterialID(const LLSD::Binary& pMaterialID);
|
||||
LLMaterialID(const LLMaterialID& pOtherMaterialID);
|
||||
~LLMaterialID();
|
||||
|
||||
bool operator == (const LLMaterialID& pOtherMaterialID) const;
|
||||
bool operator != (const LLMaterialID& pOtherMaterialID) const;
|
||||
LLMaterialID& operator = (const LLMaterialID& pOtherMaterialID);
|
||||
|
||||
bool isNull() const;
|
||||
|
||||
const U8* get() const;
|
||||
void set(const void* pMemory);
|
||||
void clear();
|
||||
|
||||
static const LLMaterialID null;
|
||||
|
||||
private:
|
||||
void parseFromBinary(const LLSD::Binary& pMaterialID);
|
||||
void copyFromOtherMaterialID(const LLMaterialID& pOtherMaterialID);
|
||||
int compareToOtherMaterialID(const LLMaterialID& pOtherMaterialID) const;
|
||||
|
||||
U8 mID[MATERIAL_ID_SIZE];
|
||||
} ;
|
||||
|
||||
#endif // LL_LLMATERIALID_H
|
||||
|
||||
|
|
@ -39,6 +39,7 @@
|
|||
#include "lldatapacker.h"
|
||||
#include "llsdutil_math.h"
|
||||
#include "llprimtexturelist.h"
|
||||
#include "llmaterialid.h"
|
||||
|
||||
/**
|
||||
* exported constants
|
||||
|
|
@ -366,6 +367,11 @@ S32 LLPrimitive::setTEGlow(const U8 index, const F32 glow)
|
|||
return mTextureList.setGlow(index, glow);
|
||||
}
|
||||
|
||||
S32 LLPrimitive::setTEMaterialID(const U8 index, const LLMaterialID& pMaterialID)
|
||||
{
|
||||
return mTextureList.setMaterialID(index, pMaterialID);
|
||||
}
|
||||
|
||||
|
||||
LLPCode LLPrimitive::legacyToPCode(const U8 legacy)
|
||||
{
|
||||
|
|
@ -1091,6 +1097,7 @@ BOOL LLPrimitive::packTEMessage(LLMessageSystem *mesgsys) const
|
|||
U8 bump[MAX_TES];
|
||||
U8 media_flags[MAX_TES];
|
||||
U8 glow[MAX_TES];
|
||||
U8 material_data[MAX_TES*16];
|
||||
|
||||
const U32 MAX_TE_BUFFER = 4096;
|
||||
U8 packed_buffer[MAX_TE_BUFFER];
|
||||
|
|
@ -1128,6 +1135,9 @@ BOOL LLPrimitive::packTEMessage(LLMessageSystem *mesgsys) const
|
|||
bump[face_index] = te->getBumpShinyFullbright();
|
||||
media_flags[face_index] = te->getMediaTexGen();
|
||||
glow[face_index] = (U8) llround((llclamp(te->getGlow(), 0.0f, 1.0f) * (F32)0xFF));
|
||||
|
||||
// Directly sending material_ids is not safe!
|
||||
memcpy(&material_data[face_index*16],getTE(face_index)->getMaterialID().get(),16); /* Flawfinder: ignore */
|
||||
}
|
||||
|
||||
cur_ptr += packTEField(cur_ptr, (U8 *)image_ids, sizeof(LLUUID),last_face_index, MVT_LLUUID);
|
||||
|
|
@ -1149,6 +1159,8 @@ BOOL LLPrimitive::packTEMessage(LLMessageSystem *mesgsys) const
|
|||
cur_ptr += packTEField(cur_ptr, (U8 *)media_flags, 1 ,last_face_index, MVT_U8);
|
||||
*cur_ptr++ = 0;
|
||||
cur_ptr += packTEField(cur_ptr, (U8 *)glow, 1 ,last_face_index, MVT_U8);
|
||||
*cur_ptr++ = 0;
|
||||
cur_ptr += packTEField(cur_ptr, (U8 *)material_data, 16, last_face_index, MVT_LLUUID);
|
||||
}
|
||||
mesgsys->addBinaryDataFast(_PREHASH_TextureEntry, packed_buffer, (S32)(cur_ptr - packed_buffer));
|
||||
|
||||
|
|
@ -1170,6 +1182,7 @@ BOOL LLPrimitive::packTEMessage(LLDataPacker &dp) const
|
|||
U8 bump[MAX_TES];
|
||||
U8 media_flags[MAX_TES];
|
||||
U8 glow[MAX_TES];
|
||||
U8 material_data[MAX_TES*16];
|
||||
|
||||
const U32 MAX_TE_BUFFER = 4096;
|
||||
U8 packed_buffer[MAX_TE_BUFFER];
|
||||
|
|
@ -1207,6 +1220,9 @@ BOOL LLPrimitive::packTEMessage(LLDataPacker &dp) const
|
|||
bump[face_index] = te->getBumpShinyFullbright();
|
||||
media_flags[face_index] = te->getMediaTexGen();
|
||||
glow[face_index] = (U8) llround((llclamp(te->getGlow(), 0.0f, 1.0f) * (F32)0xFF));
|
||||
|
||||
// Directly sending material_ids is not safe!
|
||||
memcpy(&material_data[face_index*16],getTE(face_index)->getMaterialID().get(),16); /* Flawfinder: ignore */
|
||||
}
|
||||
|
||||
cur_ptr += packTEField(cur_ptr, (U8 *)image_ids, sizeof(LLUUID),last_face_index, MVT_LLUUID);
|
||||
|
|
@ -1228,6 +1244,8 @@ BOOL LLPrimitive::packTEMessage(LLDataPacker &dp) const
|
|||
cur_ptr += packTEField(cur_ptr, (U8 *)media_flags, 1 ,last_face_index, MVT_U8);
|
||||
*cur_ptr++ = 0;
|
||||
cur_ptr += packTEField(cur_ptr, (U8 *)glow, 1 ,last_face_index, MVT_U8);
|
||||
*cur_ptr++ = 0;
|
||||
cur_ptr += packTEField(cur_ptr, (U8 *)material_data, 16, last_face_index, MVT_LLUUID);
|
||||
}
|
||||
|
||||
dp.packBinaryData(packed_buffer, (S32)(cur_ptr - packed_buffer), "TextureEntry");
|
||||
|
|
@ -1246,6 +1264,7 @@ S32 LLPrimitive::unpackTEMessage(LLMessageSystem* mesgsys, char const* block_nam
|
|||
const U32 MAX_TES = 32;
|
||||
|
||||
// Avoid construction of 32 UUIDs per call. JC
|
||||
static LLMaterialID material_ids[MAX_TES];
|
||||
|
||||
U8 image_data[MAX_TES*16];
|
||||
U8 colors[MAX_TES*4];
|
||||
|
|
@ -1257,6 +1276,7 @@ S32 LLPrimitive::unpackTEMessage(LLMessageSystem* mesgsys, char const* block_nam
|
|||
U8 bump[MAX_TES];
|
||||
U8 media_flags[MAX_TES];
|
||||
U8 glow[MAX_TES];
|
||||
U8 material_data[MAX_TES*16];
|
||||
|
||||
const U32 MAX_TE_BUFFER = 4096;
|
||||
U8 packed_buffer[MAX_TE_BUFFER];
|
||||
|
|
@ -1309,6 +1329,13 @@ S32 LLPrimitive::unpackTEMessage(LLMessageSystem* mesgsys, char const* block_nam
|
|||
cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)media_flags, 1, face_count, MVT_U8);
|
||||
cur_ptr++;
|
||||
cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)glow, 1, face_count, MVT_U8);
|
||||
cur_ptr++;
|
||||
cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)material_data, 16, face_count, MVT_LLUUID);
|
||||
|
||||
for (U32 i = 0; i < face_count; i++)
|
||||
{
|
||||
material_ids[i].set(&material_data[i * 16]);
|
||||
}
|
||||
|
||||
LLColor4 color;
|
||||
LLColor4U coloru;
|
||||
|
|
@ -1321,6 +1348,7 @@ S32 LLPrimitive::unpackTEMessage(LLMessageSystem* mesgsys, char const* block_nam
|
|||
retval |= setTEBumpShinyFullbright(i, bump[i]);
|
||||
retval |= setTEMediaTexGen(i, media_flags[i]);
|
||||
retval |= setTEGlow(i, (F32)glow[i] / (F32)0xFF);
|
||||
retval |= setTEMaterialID(i, material_ids[i]);
|
||||
coloru = LLColor4U(colors + 4*i);
|
||||
|
||||
// Note: This is an optimization to send common colors (1.f, 1.f, 1.f, 1.f)
|
||||
|
|
@ -1346,6 +1374,7 @@ S32 LLPrimitive::unpackTEMessage(LLDataPacker &dp)
|
|||
|
||||
// Avoid construction of 32 UUIDs per call
|
||||
static LLUUID image_ids[MAX_TES];
|
||||
static LLMaterialID material_ids[MAX_TES];
|
||||
|
||||
U8 image_data[MAX_TES*16];
|
||||
U8 colors[MAX_TES*4];
|
||||
|
|
@ -1357,7 +1386,7 @@ S32 LLPrimitive::unpackTEMessage(LLDataPacker &dp)
|
|||
U8 bump[MAX_TES];
|
||||
U8 media_flags[MAX_TES];
|
||||
U8 glow[MAX_TES];
|
||||
unsigned char material_id[MAX_TES*16];
|
||||
U8 material_data[MAX_TES*16];
|
||||
|
||||
const U32 MAX_TE_BUFFER = 4096;
|
||||
U8 packed_buffer[MAX_TE_BUFFER];
|
||||
|
|
@ -1401,30 +1430,12 @@ S32 LLPrimitive::unpackTEMessage(LLDataPacker &dp)
|
|||
cur_ptr++;
|
||||
cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)glow, 1, face_count, MVT_U8);
|
||||
cur_ptr++;
|
||||
cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)material_id, 16, face_count, MVT_LLUUID);
|
||||
|
||||
#if 0
|
||||
for (U32 curFace = 0U; curFace < face_count; ++curFace)
|
||||
{
|
||||
std::string materialID(reinterpret_cast<char *>(&material_id[curFace * 16]), 16);
|
||||
std::string materialIDString;
|
||||
for (unsigned int i = 0U; i < 4U; ++i)
|
||||
{
|
||||
if (i != 0U)
|
||||
{
|
||||
materialIDString += "-";
|
||||
}
|
||||
const U32 *value = reinterpret_cast<const U32*>(&materialID.c_str()[i * 4]);
|
||||
materialIDString += llformat("%08x", *value);
|
||||
}
|
||||
|
||||
llinfos << "STINSON DEBUG: found material ID for face #" << curFace << " => " << materialIDString << llendl;
|
||||
}
|
||||
#endif
|
||||
cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)material_data, 16, face_count, MVT_LLUUID);
|
||||
|
||||
for (i = 0; i < face_count; i++)
|
||||
{
|
||||
memcpy(image_ids[i].mData,&image_data[i*16],16); /* Flawfinder: ignore */
|
||||
material_ids[i].set(&material_data[i * 16]);
|
||||
}
|
||||
|
||||
LLColor4 color;
|
||||
|
|
@ -1438,6 +1449,7 @@ S32 LLPrimitive::unpackTEMessage(LLDataPacker &dp)
|
|||
retval |= setTEBumpShinyFullbright(i, bump[i]);
|
||||
retval |= setTEMediaTexGen(i, media_flags[i]);
|
||||
retval |= setTEGlow(i, (F32)glow[i] / (F32)0xFF);
|
||||
retval |= setTEMaterialID(i, material_ids[i]);
|
||||
coloru = LLColor4U(colors + 4*i);
|
||||
|
||||
// Note: This is an optimization to send common colors (1.f, 1.f, 1.f, 1.f)
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ class LLMessageSystem;
|
|||
class LLVolumeParams;
|
||||
class LLColor4;
|
||||
class LLColor3;
|
||||
class LLMaterialID;
|
||||
class LLTextureEntry;
|
||||
class LLDataPacker;
|
||||
class LLVolumeMgr;
|
||||
|
|
@ -353,6 +354,7 @@ public:
|
|||
virtual S32 setTEFullbright(const U8 te, const U8 fullbright);
|
||||
virtual S32 setTEMediaFlags(const U8 te, const U8 flags);
|
||||
virtual S32 setTEGlow(const U8 te, const F32 glow);
|
||||
virtual S32 setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID);
|
||||
virtual BOOL setMaterial(const U8 material); // returns TRUE if material changed
|
||||
|
||||
void copyTEs(const LLPrimitive *primitive);
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#include "linden_common.h"
|
||||
|
||||
#include "llprimtexturelist.h"
|
||||
#include "llmaterialid.h"
|
||||
#include "lltextureentry.h"
|
||||
#include "llmemtype.h"
|
||||
|
||||
|
|
@ -359,6 +360,15 @@ S32 LLPrimTextureList::setGlow(const U8 index, const F32 glow)
|
|||
return TEM_CHANGE_NONE;
|
||||
}
|
||||
|
||||
S32 LLPrimTextureList::setMaterialID(const U8 index, const LLMaterialID& pMaterialID)
|
||||
{
|
||||
if (index < mEntryList.size())
|
||||
{
|
||||
return mEntryList[index]->setMaterialID(pMaterialID);
|
||||
}
|
||||
return TEM_CHANGE_NONE;
|
||||
}
|
||||
|
||||
S32 LLPrimTextureList::size() const
|
||||
{
|
||||
return mEntryList.size();
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
|
||||
|
||||
class LLTextureEntry;
|
||||
class LLMaterialID;
|
||||
|
||||
// this is a list of LLTextureEntry*'s because in practice the list's elements
|
||||
// are of some derived class: LLFooTextureEntry
|
||||
|
|
@ -102,6 +103,7 @@ public:
|
|||
S32 setFullbright(const U8 index, const U8 t);
|
||||
S32 setMediaFlags(const U8 index, const U8 media_flags);
|
||||
S32 setGlow(const U8 index, const F32 glow);
|
||||
S32 setMaterialID(const U8 index, const LLMaterialID& pMaterialID);
|
||||
|
||||
S32 size() const;
|
||||
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
#include "lluuid.h"
|
||||
#include "llmediaentry.h"
|
||||
#include "lltextureentry.h"
|
||||
#include "llmaterialid.h"
|
||||
#include "llsdutil_math.h"
|
||||
#include "v4color.h"
|
||||
|
||||
|
|
@ -83,6 +84,8 @@ LLTextureEntry::LLTextureEntry(const LLTextureEntry &rhs)
|
|||
mBump = rhs.mBump;
|
||||
mMediaFlags = rhs.mMediaFlags;
|
||||
mGlow = rhs.mGlow;
|
||||
mMaterialID = rhs.mMaterialID;
|
||||
|
||||
if (rhs.mMediaEntry != NULL) {
|
||||
// Make a copy
|
||||
mMediaEntry = new LLMediaEntry(*rhs.mMediaEntry);
|
||||
|
|
@ -103,6 +106,7 @@ LLTextureEntry &LLTextureEntry::operator=(const LLTextureEntry &rhs)
|
|||
mBump = rhs.mBump;
|
||||
mMediaFlags = rhs.mMediaFlags;
|
||||
mGlow = rhs.mGlow;
|
||||
mMaterialID = rhs.mMaterialID;
|
||||
if (mMediaEntry != NULL) {
|
||||
delete mMediaEntry;
|
||||
}
|
||||
|
|
@ -130,6 +134,7 @@ void LLTextureEntry::init(const LLUUID& tex_id, F32 scale_s, F32 scale_t, F32 of
|
|||
mBump = bump;
|
||||
mMediaFlags = 0x0;
|
||||
mGlow = 0;
|
||||
mMaterialID.clear();
|
||||
|
||||
setColor(LLColor4(1.f, 1.f, 1.f, 1.f));
|
||||
if (mMediaEntry != NULL) {
|
||||
|
|
@ -159,6 +164,7 @@ bool LLTextureEntry::operator!=(const LLTextureEntry &rhs) const
|
|||
if (mBump != rhs.mBump) return (true);
|
||||
if (mMediaFlags != rhs.mMediaFlags) return (true);
|
||||
if (mGlow != rhs.mGlow) return (true);
|
||||
if (mMaterialID != rhs.mMaterialID) return (true);
|
||||
return(false);
|
||||
}
|
||||
|
||||
|
|
@ -174,6 +180,7 @@ bool LLTextureEntry::operator==(const LLTextureEntry &rhs) const
|
|||
if (mBump != rhs.mBump) return (false);
|
||||
if (mMediaFlags != rhs.mMediaFlags) return false;
|
||||
if (mGlow != rhs.mGlow) return false;
|
||||
if (mMaterialID != rhs.mMaterialID) return (false);
|
||||
return(true);
|
||||
}
|
||||
|
||||
|
|
@ -523,6 +530,16 @@ S32 LLTextureEntry::setGlow(F32 glow)
|
|||
return TEM_CHANGE_NONE;
|
||||
}
|
||||
|
||||
S32 LLTextureEntry::setMaterialID(const LLMaterialID& pMaterialID)
|
||||
{
|
||||
if (mMaterialID != pMaterialID)
|
||||
{
|
||||
mMaterialID = pMaterialID;
|
||||
return TEM_CHANGE_TEXTURE;
|
||||
}
|
||||
return TEM_CHANGE_NONE;
|
||||
}
|
||||
|
||||
void LLTextureEntry::setMediaData(const LLMediaEntry &media_entry)
|
||||
{
|
||||
mMediaFlags |= MF_HAS_MEDIA;
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
#include "lluuid.h"
|
||||
#include "v4color.h"
|
||||
#include "llsd.h"
|
||||
#include "llmaterialid.h"
|
||||
|
||||
// These bits are used while unpacking TEM messages to tell which aspects of
|
||||
// the texture entry changed.
|
||||
|
|
@ -121,6 +122,7 @@ public:
|
|||
S32 setTexGen(U8 texGen);
|
||||
S32 setMediaTexGen(U8 media);
|
||||
S32 setGlow(F32 glow);
|
||||
S32 setMaterialID(const LLMaterialID& pMaterialID);
|
||||
|
||||
virtual const LLUUID &getID() const { return mID; }
|
||||
const LLColor4 &getColor() const { return mColor; }
|
||||
|
|
@ -139,6 +141,7 @@ public:
|
|||
U8 getTexGen() const { return mMediaFlags & TEM_TEX_GEN_MASK; }
|
||||
U8 getMediaTexGen() const { return mMediaFlags; }
|
||||
F32 getGlow() const { return mGlow; }
|
||||
const LLMaterialID& getMaterialID() const { return mMaterialID; };
|
||||
|
||||
// *NOTE: it is possible for hasMedia() to return true, but getMediaData() to return NULL.
|
||||
// CONVERSELY, it is also possible for hasMedia() to return false, but getMediaData()
|
||||
|
|
@ -193,6 +196,7 @@ protected:
|
|||
U8 mBump; // Bump map, shiny, and fullbright
|
||||
U8 mMediaFlags; // replace with web page, movie, etc.
|
||||
F32 mGlow;
|
||||
LLMaterialID mMaterialID;
|
||||
|
||||
// Note the media data is not sent via the same message structure as the rest of the TE
|
||||
LLMediaEntry* mMediaEntry; // The media data for the face
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@
|
|||
#include "llfontgl.h"
|
||||
#include "llhttpclient.h"
|
||||
#include "lllineeditor.h"
|
||||
#include "llmaterialid.h"
|
||||
#include "llscrolllistcell.h"
|
||||
#include "llscrolllistctrl.h"
|
||||
#include "llscrolllistitem.h"
|
||||
|
|
@ -56,7 +57,9 @@
|
|||
#include "lltextvalidate.h"
|
||||
#include "lluicolortable.h"
|
||||
#include "lluictrl.h"
|
||||
#include "lluuid.h"
|
||||
#include "llviewerobject.h"
|
||||
#include "llviewerobjectlist.h"
|
||||
#include "llviewerparcelmgr.h"
|
||||
#include "llviewerregion.h"
|
||||
#include "v4color.h"
|
||||
|
|
@ -217,6 +220,10 @@ BOOL LLFloaterDebugMaterials::postBuild()
|
|||
mPutScrollList = findChild<LLScrollListCtrl>("put_scroll_list");
|
||||
llassert(mPutScrollList != NULL);
|
||||
|
||||
mQueryVisibleObjectsButton = findChild<LLButton>("query_visible_object_button");
|
||||
llassert(mQueryVisibleObjectsButton != NULL);
|
||||
mQueryVisibleObjectsButton->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onQueryVisibleObjectsClicked, this));
|
||||
|
||||
mGoodPostButton = findChild<LLButton>("good_post_button");
|
||||
llassert(mGoodPostButton != NULL);
|
||||
mGoodPostButton->setCommitCallback(boost::bind(&LLFloaterDebugMaterials::onGoodPostClicked, this));
|
||||
|
|
@ -316,6 +323,7 @@ LLFloaterDebugMaterials::LLFloaterDebugMaterials(const LLSD& pParams)
|
|||
mPutSetButton(NULL),
|
||||
mPutClearButton(NULL),
|
||||
mPutScrollList(NULL),
|
||||
mQueryVisibleObjectsButton(NULL),
|
||||
mGoodPostButton(NULL),
|
||||
mBadPostButton(NULL),
|
||||
mPostScrollList(NULL),
|
||||
|
|
@ -365,6 +373,42 @@ void LLFloaterDebugMaterials::onPutClearClicked()
|
|||
requestPutMaterials(false);
|
||||
}
|
||||
|
||||
void LLFloaterDebugMaterials::onQueryVisibleObjectsClicked()
|
||||
{
|
||||
S32 numViewerObjects = gObjectList.getNumObjects();
|
||||
for (S32 viewerObjectIndex = 0; viewerObjectIndex < numViewerObjects; ++viewerObjectIndex)
|
||||
{
|
||||
const LLViewerObject *viewerObject = gObjectList.getObject(viewerObjectIndex);
|
||||
if ((viewerObject != NULL) && !viewerObject->isDead())
|
||||
{
|
||||
U8 objectNumTEs = viewerObject->getNumTEs();
|
||||
|
||||
if (objectNumTEs > 0U)
|
||||
{
|
||||
const LLUUID& objectId = viewerObject->getID();
|
||||
U32 objectLocalId = viewerObject->getLocalID();
|
||||
S32 objectNumFaces = viewerObject->getNumFaces();
|
||||
const LLViewerRegion* objectRegion = viewerObject->getRegion();
|
||||
for (U8 curTEIndex = 0U; curTEIndex < objectNumTEs; ++curTEIndex)
|
||||
{
|
||||
const LLTextureEntry* objectTE = viewerObject->getTE(curTEIndex);
|
||||
llassert(objectTE != NULL);
|
||||
const LLMaterialID& objectMaterialID = objectTE->getMaterialID();
|
||||
if (!objectMaterialID.isNull())
|
||||
{
|
||||
llinfos << "STINSON DEBUG: #" << (viewerObjectIndex + 1) << ": " << objectId.asString()
|
||||
<< " (" << ((objectRegion != NULL) ? objectRegion->getRegionID().asString() : "<null>")
|
||||
<< ") [" << objectLocalId << "] {" << static_cast<unsigned int>(curTEIndex)
|
||||
<< "} : numFaces(" << objectNumFaces << ") material("
|
||||
<< convertToPrintableMaterialID(objectMaterialID) << ")" << llendl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterDebugMaterials::onGoodPostClicked()
|
||||
{
|
||||
requestPostMaterials(true);
|
||||
|
|
@ -1357,6 +1401,22 @@ std::string LLFloaterDebugMaterials::convertToPrintableMaterialID(const LLSD& pB
|
|||
return materialIDString;
|
||||
}
|
||||
|
||||
std::string LLFloaterDebugMaterials::convertToPrintableMaterialID(const LLMaterialID& pMaterialID) const
|
||||
{
|
||||
std::string materialID(reinterpret_cast<const char *>(pMaterialID.get()), 16);
|
||||
std::string materialIDString;
|
||||
for (unsigned int i = 0U; i < 4; ++i)
|
||||
{
|
||||
if (i != 0U)
|
||||
{
|
||||
materialIDString += "-";
|
||||
}
|
||||
const U32 *value = reinterpret_cast<const U32*>(&materialID.c_str()[i * 4]);
|
||||
materialIDString += llformat("%08x", *value);
|
||||
}
|
||||
return materialIDString;
|
||||
}
|
||||
|
||||
S32 LLFloaterDebugMaterials::getNormalMapOffsetX() const
|
||||
{
|
||||
return getLineEditorValue(mNormalMapOffsetX);
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
class LLButton;
|
||||
class LLColorSwatchCtrl;
|
||||
class LLLineEditor;
|
||||
class LLMaterialID;
|
||||
class LLScrollListCtrl;
|
||||
class LLSD;
|
||||
class LLTextBase;
|
||||
|
|
@ -74,6 +75,7 @@ private:
|
|||
void onValueEntered(LLUICtrl* pUICtrl);
|
||||
void onPutSetClicked();
|
||||
void onPutClearClicked();
|
||||
void onQueryVisibleObjectsClicked();
|
||||
void onGoodPostClicked();
|
||||
void onBadPostClicked();
|
||||
void onRegionCross();
|
||||
|
|
@ -114,6 +116,7 @@ private:
|
|||
void updateStatusMessage();
|
||||
void updateControls();
|
||||
std::string convertToPrintableMaterialID(const LLSD& pBinaryHash) const;
|
||||
std::string convertToPrintableMaterialID(const LLMaterialID& pMaterialID) const;
|
||||
|
||||
S32 getNormalMapOffsetX() const;
|
||||
S32 getNormalMapOffsetY() const;
|
||||
|
|
@ -158,6 +161,7 @@ private:
|
|||
LLButton* mPutSetButton;
|
||||
LLButton* mPutClearButton;
|
||||
LLScrollListCtrl* mPutScrollList;
|
||||
LLButton* mQueryVisibleObjectsButton;
|
||||
LLButton* mGoodPostButton;
|
||||
LLButton* mBadPostButton;
|
||||
LLScrollListCtrl* mPostScrollList;
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@
|
|||
#include "llframetimer.h"
|
||||
#include "llinventory.h"
|
||||
#include "llinventorydefines.h"
|
||||
#include "llmaterialid.h"
|
||||
#include "llmaterialtable.h"
|
||||
#include "llmutelist.h"
|
||||
#include "llnamevalue.h"
|
||||
|
|
@ -4267,6 +4268,26 @@ S32 LLViewerObject::setTEGlow(const U8 te, const F32 glow)
|
|||
return retval;
|
||||
}
|
||||
|
||||
S32 LLViewerObject::setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID)
|
||||
{
|
||||
S32 retval = 0;
|
||||
const LLTextureEntry *tep = getTE(te);
|
||||
if (!tep)
|
||||
{
|
||||
llwarns << "No texture entry for te " << (S32)te << ", object " << mID << llendl;
|
||||
}
|
||||
else if (pMaterialID != tep->getMaterialID())
|
||||
{
|
||||
retval = LLPrimitive::setTEMaterialID(te, pMaterialID);
|
||||
setChanged(TEXTURE);
|
||||
if (mDrawable.notNull() && retval)
|
||||
{
|
||||
gPipeline.markTextured(mDrawable);
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
S32 LLViewerObject::setTEScale(const U8 te, const F32 s, const F32 t)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ class LLDrawable;
|
|||
class LLHost;
|
||||
class LLHUDText;
|
||||
class LLWorld;
|
||||
class LLMaterialID;
|
||||
class LLNameValue;
|
||||
class LLNetMap;
|
||||
class LLMessageSystem;
|
||||
|
|
@ -88,18 +89,6 @@ typedef void (*inventory_callback)(LLViewerObject*,
|
|||
S32 serial_num,
|
||||
void*);
|
||||
|
||||
// for exporting textured materials from SL
|
||||
struct LLMaterialExportInfo
|
||||
{
|
||||
public:
|
||||
LLMaterialExportInfo(S32 mat_index, S32 texture_index, LLColor4 color) :
|
||||
mMaterialIndex(mat_index), mTextureIndex(texture_index), mColor(color) {};
|
||||
|
||||
S32 mMaterialIndex;
|
||||
S32 mTextureIndex;
|
||||
LLColor4 mColor;
|
||||
};
|
||||
|
||||
struct PotentialReturnableObject
|
||||
{
|
||||
LLBBox box;
|
||||
|
|
@ -320,6 +309,7 @@ public:
|
|||
/*virtual*/ S32 setTEFullbright(const U8 te, const U8 fullbright );
|
||||
/*virtual*/ S32 setTEMediaFlags(const U8 te, const U8 media_flags );
|
||||
/*virtual*/ S32 setTEGlow(const U8 te, const F32 glow);
|
||||
/*virtual*/ S32 setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID);
|
||||
/*virtual*/ BOOL setMaterial(const U8 material);
|
||||
virtual void setTEImage(const U8 te, LLViewerTexture *imagep); // Not derived from LLPrimitive
|
||||
virtual void changeTEImage(S32 index, LLViewerTexture* new_image) ;
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
#include "lldir.h"
|
||||
#include "llflexibleobject.h"
|
||||
#include "llfloatertools.h"
|
||||
#include "llmaterialid.h"
|
||||
#include "llmaterialtable.h"
|
||||
#include "llprimitive.h"
|
||||
#include "llvolume.h"
|
||||
|
|
@ -1960,6 +1961,17 @@ S32 LLVOVolume::setTEGlow(const U8 te, const F32 glow)
|
|||
return res;
|
||||
}
|
||||
|
||||
S32 LLVOVolume::setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID)
|
||||
{
|
||||
S32 res = LLViewerObject::setTEMaterialID(te, pMaterialID);
|
||||
if (res)
|
||||
{
|
||||
gPipeline.markTextured(mDrawable);
|
||||
mFaceMappingChanged = TRUE;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
S32 LLVOVolume::setTEScale(const U8 te, const F32 s, const F32 t)
|
||||
{
|
||||
S32 res = LLViewerObject::setTEScale(te, s, t);
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
|
||||
class LLViewerTextureAnim;
|
||||
class LLDrawPool;
|
||||
class LLMaterialID;
|
||||
class LLSelectNode;
|
||||
class LLObjectMediaDataClient;
|
||||
class LLObjectMediaNavigateClient;
|
||||
|
|
@ -185,6 +186,7 @@ public:
|
|||
/*virtual*/ S32 setTEBumpShinyFullbright(const U8 te, const U8 bump);
|
||||
/*virtual*/ S32 setTEMediaFlags(const U8 te, const U8 media_flags);
|
||||
/*virtual*/ S32 setTEGlow(const U8 te, const F32 glow);
|
||||
/*virtual*/ S32 setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID);
|
||||
/*virtual*/ S32 setTEScale(const U8 te, const F32 s, const F32 t);
|
||||
/*virtual*/ S32 setTEScaleS(const U8 te, const F32 s);
|
||||
/*virtual*/ S32 setTEScaleT(const U8 te, const F32 t);
|
||||
|
|
|
|||
|
|
@ -824,6 +824,14 @@
|
|||
top_pad="10"
|
||||
height="132"
|
||||
width="1220">
|
||||
<button
|
||||
follows="left|top"
|
||||
height="22"
|
||||
label="Query Visible Objects"
|
||||
layout="topleft"
|
||||
name="query_visible_object_button"
|
||||
top_pad="0"
|
||||
width="214"/>
|
||||
<button
|
||||
follows="left|top"
|
||||
height="22"
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
#include "../llvovolume.h"
|
||||
|
||||
#include "../../llprimitive/llmediaentry.cpp"
|
||||
#include "../../llprimitive/llmaterialid.cpp"
|
||||
#include "../../llprimitive/lltextureentry.cpp"
|
||||
#include "../../llmessage/tests/llcurl_stub.cpp"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue