Exemplo n.º 1
0
    IZ_BOOL CShaderProgramDX9::SetValue(CGraphicsDevice* device, const SHADER_PARAM_HANDLE& handle, const void* p, IZ_UINT size)
    {
        IZ_ASSERT(IsValid());
        IZ_ASSERT(device->GetShaderProgram() == this);

        _EXEC_ARRAY_FUNC(SetValue, device, p, size);
    }
Exemplo n.º 2
0
    /**
    * アンロック
    */
    IZ_BOOL CVertexBufferOGL::Unlock(CGraphicsDevice* device)
    {
        IZ_ASSERT(s_isLocked);

        IZ_ASSERT(m_VB > 0);

        IZ_BOOL isLocked = m_isLocked;
    
        if (isLocked) {
#if 0
            CALL_GL_API(glUnmapBuffer(GL_COPY_WRITE_BUFFER));

            CALL_GL_API(glBindBuffer(
                GL_COPY_WRITE_BUFFER,
                0));
#else
            CALL_GL_API(glUnmapNamedBuffer(m_VB));
#endif

            m_prevVB = 0;
            m_isLocked = IZ_FALSE;
        }

        s_isLocked = IZ_FALSE;

        return isLocked;
    }
Exemplo n.º 3
0
StateMachineNode* AnimationStateMachine::next()
{
    // 入ってきたノードに遷移するビヘイビアを探す.
    IZ_ASSERT(m_fromBehaviour != nullptr);

    auto from = m_fromBehaviour->getFrom();
    IZ_ASSERT(from != nullptr);

    auto item = m_behaviours.GetTop();

    while (item) {
        auto behaviour = item->GetData();

        auto to = behaviour->getTo();

        if (from == to) {
            return behaviour;
        }

        item = item->GetNext();
    }

    IZ_ASSERT(IZ_FALSE);

    return nullptr;
}
Exemplo n.º 4
0
    IZ_BOOL CShaderProgramDX9::SetVector(CGraphicsDevice* device, const SHADER_PARAM_HANDLE& handle, const math::SVector4& v)
    {
        IZ_ASSERT(IsValid());
        IZ_ASSERT(device->GetShaderProgram() == this);

        _EXEC_FUNC(SetVector, device, v);
    }
Exemplo n.º 5
0
    /**
    * Initialize memory allocator.
    */
    IZ_BOOL CChunkedMemoryAllocator::Init(IZ_UINT nBufSize, void* pBuf, IZ_UINT nChunkSize)
    {
        IZ_ASSERT(!m_AllocList.HasItem());
        IZ_ASSERT(nChunkSize > 0);

        m_FreeList.Clear();

        IZ_BOOL ret = IZ_FALSE;

        m_nBufSize = nBufSize;
        m_pBuf = reinterpret_cast<IZ_UINT8*>(pBuf);

        // ChunkSize must be power of 2.
        m_nChunkSize = math::CMath::ComputeNextPow2(nChunkSize);

        // フリーリスト初期化
        SHeapHeader* p = GetHeapHeader(m_pBuf);

        if (p != IZ_NULL) {
            p->buf = m_pBuf + sizeof(SHeapHeader);
            p->size = m_nBufSize - sizeof(SHeapHeader);
            m_FreeList.AddTop(p);

            ret = IZ_TRUE;
        }

        return ret;
    }
Exemplo n.º 6
0
AnimationStateMachineBehaviour* AnimationStateMachine::addBehaviour(
    const char* from,
    const char* to,
    izanagi::CAnimationInterp::E_INTERP_TYPE interpType/*= izanagi::CAnimationInterp::E_INTERP_TYPE::E_INTERP_TYPE_SMOOTH*/)
{
    IZ_ASSERT(from || to);

    AnimationStateMachineNode* fromNode = nullptr;
    AnimationStateMachineNode* toNode = nullptr;

    if (from) {
        IZ_ASSERT(strlen(from) > 0);
        if (m_entry.getName() != from) {
            fromNode = getNode(from);
        }
    }

    if (to) {
        IZ_ASSERT(strlen(to) > 0);
        if (m_exit.getName() != to) {
            toNode = getNode(to);
        }
    }

    auto ret = addBehaviour(
                   fromNode, toNode,
                   interpType);

    return ret;
}
Exemplo n.º 7
0
// シェーダごとの初期化
BOOL CHemiLightShader::InitInternal(izanagi::graph::CGraphicsDevice* pDevice)
{
	UNUSED_ALWAYS(pDevice);
	IZ_ASSERT(m_pEffect != IZ_NULL);

	if (!GetCommonParameterHandles()) {
		return IZ_FALSE;
	}

	static const char* PARAM_NAME[] = {
		"g_vEye",
		"g_vMtrlDiffuse",
		"g_vAxis",
		"g_vUpColor",
		"g_vDownColor",
	};
	C_ASSERT(COUNTOF(PARAM_NAME) == HANDLE_NUM);

	IZ_BOOL result = GetParameterByName(
						HANDLE_NUM,
						m_hHandles,
						PARAM_NAME);
	IZ_ASSERT(result);

	return result;
}
Exemplo n.º 8
0
IZ_INT AssimpImporter::GetJointParent(
    IZ_UINT nIdx,
    const std::vector<izanagi::S_SKL_JOINT>& tvJoint)
{
    auto it = m_nodes.find(nIdx);

    IZ_INT ret = -1;

    if (it != m_nodes.end()) {
        const Node& node = it->second;

        auto parentId = node.parent;

        if (parentId >= 0) {
            auto itParent = m_nodes.find(parentId);
            IZ_ASSERT(itParent != m_nodes.end());

            const Node& parentNode = itParent->second;

            if (parentNode.node == node.node->mParent) {
                ret = parentId;
            }
            else {
                IZ_ASSERT(IZ_FALSE);
            }
        }
    }

    return ret;
}
Exemplo n.º 9
0
    IZ_BOOL CTextureOGL::Write(
        IZ_UINT level,
        void* data,
        IZ_UINT x, IZ_UINT y,
        IZ_UINT width, IZ_UINT height)
    {
        IZ_ASSERT(m_Texture != 0);

        // Check not locked.
        IZ_ASSERT(m_LockedSize == 0);

        IZ_ASSERT(x < width);
        IZ_ASSERT(y < height);

        IZ_UINT w = GetWidth(level);
        IZ_UINT h = GetHeight(level);

        VRETURN(width <= w);
        VRETURN(height <= h);

        CALL_GL_API(::glTextureSubImage2D(
            m_Texture,
            level,
            x, y,
            width, height,
            m_GLFormat,
            m_GLType,
            data));

        return IZ_TRUE;
    }
Exemplo n.º 10
0
    IZ_BOOL CShaderProgramDX9::SetMatrix(CGraphicsDevice* device, const SHADER_PARAM_HANDLE& handle, const math::SMatrix44& m)
    {
        IZ_ASSERT(IsValid());
        IZ_ASSERT(device->GetShaderProgram() == this);

        _EXEC_FUNC(SetMatrix, device, m);
    }
Exemplo n.º 11
0
IZ_BOOL CStateBasic::Enter(izanagi::IMemoryAllocator* allocator, void* val)
{
	izanagi::graph::CGraphicsDevice* pDevice = CMySystem::GetInstance().GetGraphicsDevice();
	izanagi::IMemoryAllocator* pAllocator = CMySystem::GetInstance().GetMemoryAllocator();

	// シェーダ
	m_pShader = CShaderBase::CreateShader<CBasicShader>(
					pAllocator,
					pDevice,
					"./data/BasicShader.bin");
	IZ_ASSERT(m_pShader != IZ_NULL);

	// グリッド
	m_pGrid = izanagi::CDebugMeshGrid::CreateDebugMeshGrid(
				pAllocator,
				pDevice,
				0xffffffff,
				20, 20,
				10.0f);
	IZ_ASSERT(m_pGrid != IZ_NULL);

	// 球
	m_pSphere = izanagi::CDebugMeshSphere::CreateDebugMeshSphere(
					pAllocator,
					pDevice,
					izanagi::E_DEBUG_MESH_VTX_FORM_POS | izanagi::E_DEBUG_MESH_VTX_FORM_COLOR | izanagi::E_DEBUG_MESH_VTX_FORM_UV,
					0xffffffff,
					5.0f,
					50, 50);
	IZ_ASSERT(m_pSphere != IZ_NULL);

	return IZ_TRUE;
}
Exemplo n.º 12
0
    IZ_BOOL CShaderProgramDX9::SetInt(CGraphicsDevice* device, const SHADER_PARAM_HANDLE& handle, IZ_INT n)
    {
        IZ_ASSERT(IsValid());
        IZ_ASSERT(device->GetShaderProgram() == this);

        _EXEC_FUNC(SetInt, device, n);
    }
Exemplo n.º 13
0
    IZ_BOOL CShaderProgramDX9::SetIntArray(CGraphicsDevice* device, const SHADER_PARAM_HANDLE& handle, const IZ_INT* n, IZ_UINT num)
    {
        IZ_ASSERT(IsValid());
        IZ_ASSERT(device->GetShaderProgram() == this);

        _EXEC_ARRAY_FUNC(SetIntArray, device, n, num);
    }
Exemplo n.º 14
0
BOOL CFileIdCreator::Export(LPCSTR lpszExport)
{
    FILE* fpOut = NULL;
    fopen_s(&fpOut, lpszExport, "wt");
    VRETURN(fpOut != NULL);

    m_bIsEnum = FALSE;

    UINT nRootKey = izanagi::CKey::GenerateValue(m_strRoot);

    std::map<UINT, SIdInfo>::const_iterator it = m_InfoList.find(nRootKey);
    IZ_ASSERT(it != m_InfoList.end());

    const SIdInfo& sRootInfo = it->second;

    BOOL ret = Export(
                fpOut,
                sRootInfo,
                0);
    IZ_ASSERT(ret);

    fclose(fpOut);

    return ret;
}
Exemplo n.º 15
0
    // レンダーターゲットセット
    IZ_BOOL CGraphicsDevice::PushRenderTarget(CRenderTarget** rt, IZ_UINT num)
    {
        IZ_ASSERT(rt != IZ_NULL);
        IZ_ASSERT(num <= MAX_MRT_NUM);

        IZ_BOOL ret = IZ_FALSE;

        // 現在のレンダーターゲットをプッシュ
        for (IZ_UINT i = 0; i < num; ++i) {
            CRenderTarget* curRT = GetRenderTarget(i);

            if ((rt != IZ_NULL) && (curRT != rt[i]))
            {
                ret = m_RTMgr[i].Push(curRT);
                if (!ret) {
                    break;
                }
            }
        }

        if (ret) {
            SetRenderTarget(rt, num);
        }

        return ret;
    }
Exemplo n.º 16
0
    void Udp::beginRecieve(
        std::function<void(const Packet*)> onRecieve,
        void* buf,
        IZ_UINT size)
    {
        IZ_ASSERT(onRecieve && buf);
        IZ_ASSERT(!m_isRunning);

        m_isRunning = IZ_TRUE;

        m_recvThread = std::thread(
            [this, buf, size, onRecieve]{
            while (m_isRunning) {
                // TODO
                if (wait(0, 1000) > 0) {
                    Packet packet;
                    IZ_INT len = recieveFrom(buf, size, packet.endpoint);

                    if (len > 0) {
                        packet.data = (IZ_UINT8*)buf;
                        packet.size = len;
                        onRecieve(&packet);
                    }
                    else {
                        onRecieve(nullptr);
                    }
                }
                sys::CThread::YieldThread();
            }
        });
    }
Exemplo n.º 17
0
// 指定されているメッシュに含まれる三角形を取得.
IZ_UINT AssimpImporter::GetTriangles(std::vector<STri>& tvTriList)
{
    IZ_ASSERT(m_curMeshIdx < m_scene->mNumMeshes);

    auto mesh = m_scene->mMeshes[m_curMeshIdx];
    IZ_ASSERT(mesh->HasFaces());

    tvTriList.reserve(mesh->mNumFaces);

    for (IZ_UINT i = 0; i < mesh->mNumFaces; i++) {
        const auto& face = mesh->mFaces[i];

        // Check if this is a triangle.
        IZ_ASSERT(face.mNumIndices == 3);

        // NOTE
        // 全頂点を通じた一意のインデックスを指定する.

        STri tri;
        tri.vtx[0] = face.mIndices[0] + m_VtxPos;
        tri.vtx[1] = face.mIndices[1] + m_VtxPos;
        tri.vtx[2] = face.mIndices[2] + m_VtxPos;

        tvTriList.push_back(tri);
    }

    // NOTE
    // 三角形を構成する頂点に影響を与える(スキニングする)関節インデックスについては外部で処理するので、ここでは何もしない.

    m_VtxPos += mesh->mNumVertices;

    IZ_UINT ret = mesh->mNumVertices;
    
    return ret;
}
Exemplo n.º 18
0
    IZ_BOOL CShaderProgramDX9::SetVectorArray(CGraphicsDevice* device, const SHADER_PARAM_HANDLE& handle, const math::SVector4* v, IZ_UINT num)
    {
        IZ_ASSERT(IsValid());
        IZ_ASSERT(device->GetShaderProgram() == this);

        _EXEC_ARRAY_FUNC(SetVectorArray, device, v, num);
    }
Exemplo n.º 19
0
void Node::flush()
{
    auto registeredNum = getRegisteredObjNum();

    if (registeredNum == 0) {
        return;
    }

    if (!m_fp) {
        std::string path(BasePath);

#if 0
        auto depth = getDepth();
        auto mortonNumber = getMortonNumber();

        path += "r";
        uint32_t mask = 0x07 << (3 * (depth - 1));

        for (uint32_t i = 1; i < depth; i++) {
            auto n = mortonNumber & mask;

            path += n;

            mask >>= 3;
        }

        path += ".spcd";

        fopen_s(&m_fp, path.c_str(), "wb");
        IZ_ASSERT(m_fp);

        // ヘッダー分空ける.
        fseek(m_fp, sizeof(m_header), SEEK_SET);

        m_header.magic_number = FOUR_CC('S', 'P', 'C', 'D');
        m_header.version = 0;

        m_header.depth = depth;
        m_header.mortonNumber = mortonNumber;
#else
        auto id = getId();

        char tmp[10];
        sprintf(tmp, "%d\0", id);

        path += tmp;

        path += ".spcd";

        fopen_s(&m_fp, path.c_str(), "wb");
        IZ_ASSERT(m_fp);

        // ヘッダー分空ける.
        fseek(m_fp, sizeof(m_header), SEEK_SET);

        m_header.magic_number = FOUR_CC('S', 'P', 'C', 'D');
        m_header.version = 0;
#endif
    }
Exemplo n.º 20
0
    // パス記述取得
    const S_SHD_PASS* CShaderPassTable::GetDesc(IZ_UINT idx) const
    {
        IZ_ASSERT(idx < m_Header.numPass);
        IZ_ASSERT(m_pDesc != IZ_NULL);

        S_SHD_PASS* ret = &m_pDesc[idx];
        return ret;
    }
Exemplo n.º 21
0
void AssimpImporter::GetMaterialTexture(
    IZ_UINT nMtrlIdx,
    IZ_UINT nTexIdx,
    izanagi::S_MTRL_TEXTURE& sTex)
{
    IZ_ASSERT(nMtrlIdx < m_scene->mNumMaterials);

    const auto mtrl = m_scene->mMaterials[nMtrlIdx];

    sTex.type.flags = 0;

    IZ_UINT texPos = 0;

    for (IZ_UINT i = 0; i < AI_TEXTURE_TYPE_MAX; i++) {
        aiTextureType type = (aiTextureType)i;

        auto cnt = mtrl->GetTextureCount(type);

        if (texPos <= nTexIdx && nTexIdx < texPos + cnt) {
            aiString path;

            auto idx = nTexIdx - texPos;

            mtrl->GetTexture(
                type,
                idx,
                &path);

            sTex.name.SetString(path.C_Str());
            sTex.key = sTex.name.GetKeyValue();

            switch (type) {
            case aiTextureType::aiTextureType_DIFFUSE:
                // Nothing to do.
                break;
            case aiTextureType::aiTextureType_NORMALS:
                sTex.type.isNormal = IZ_TRUE;
                break;
            case aiTextureType::aiTextureType_SPECULAR:
                sTex.type.isSpecular = IZ_TRUE;
                break;
            case aiTextureType::aiTextureType_OPACITY:
                sTex.type.isTranslucent = IZ_TRUE;
                break;
            case aiTextureType::aiTextureType_REFLECTION:
                sTex.type.isEnvironment = IZ_TRUE;
                break;
            default:
                IZ_ASSERT(IZ_FALSE);
                break;
            }

            break;
        }
        
        texPos += cnt;
    }
}
Exemplo n.º 22
0
    // セマフォカウントを解放.
    void CSemaphore::Release()
    {
        // もし、セマフォが非シグナル状態ならセマフォをシグナル状態にする

        IZ_ASSERT(m_Handle != IZ_NULL);

        IZ_BOOL result = ::ReleaseSemaphore(m_Handle, 1, IZ_NULL);
        IZ_ASSERT(result);
    }
Exemplo n.º 23
0
    IZ_UINT CShaderPassTable::GetConstIdx(IZ_UINT passIdx, IZ_UINT constPos) const
    {
        IZ_ASSERT(passIdx < m_Header.numPass);
        IZ_ASSERT(m_pDesc != IZ_NULL);
        IZ_ASSERT(m_Holder != IZ_NULL);

        IZ_ASSERT(constPos < m_pDesc[passIdx].numConst);

        return m_Holder[passIdx].ptrConst[constPos].idx;
    }
Exemplo n.º 24
0
    IZ_UINT CShaderPassTable::GetSmplIdx(IZ_UINT passIdx, IZ_UINT smplPos) const
    {
        IZ_ASSERT(passIdx < m_Header.numPass);
        IZ_ASSERT(m_pDesc != IZ_NULL);
        IZ_ASSERT(m_Holder != IZ_NULL);

        IZ_ASSERT(smplPos < m_pDesc[passIdx].numSampler);

        return m_Holder[passIdx].ptrSampler[smplPos].idx;
    }
Exemplo n.º 25
0
    void CGlyphCacheImpl::BeginRegister()
    {
        IZ_ASSERT(m_FontMap != IZ_NULL);
        IZ_ASSERT(m_FontMapData == IZ_NULL);

        m_FontMapPitch = m_FontMap->Lock(
            0,
            (void**)&m_FontMapData,
            IZ_FALSE);
    }
Exemplo n.º 26
0
    IZ_UINT CShaderConstTableLite::GetSamplerIndex(IZ_PCSTR name)
    {
        IZ_ASSERT(m_ConstTable != IZ_NULL);

        D3DXHANDLE handle = m_ConstTable->GetConstantByName(NULL, name);
        IZ_ASSERT(handle != IZ_NULL);

        IZ_UINT ret = m_ConstTable->GetSamplerIndex(handle);
        return ret;
    }
Exemplo n.º 27
0
IZ_BOOL CColladaAnimation::GetAnmKey(
    IZ_UINT nNodeIdx,
    IZ_UINT nChannelIdx,
    IZ_UINT nKeyIdx,
    izanagi::S_ANM_KEY& sKey,
    std::vector<IZ_FLOAT>& tvValue)
{
    IZ_ASSERT(nNodeIdx < m_AnmNodes.size());
    const SAnmNode& sAnmNode = m_AnmNodes[nNodeIdx];

    IZ_ASSERT(nChannelIdx < sAnmNode.channels.size());
    const SAnmChannel& sAnmChannel = sAnmNode.channels[nChannelIdx];

    const SAnmInput* pKeyTime = sAnmChannel.FindInput(E_INPUT_SEMANTIC_INPUT);
    VRETURN(pKeyTime != IZ_NULL);
    VRETURN(nKeyIdx < pKeyTime->params.size());

    const SAnmInput* pValue = sAnmChannel.FindInput(E_INPUT_SEMANTIC_OUTPUT);
    VRETURN(pValue != IZ_NULL);

    sKey.keyTime = pKeyTime->params[nKeyIdx];
    sKey.stride = pValue->stride;

    const SAnmInput* pInTanget = sAnmChannel.FindInput(E_INPUT_SEMANTIC_IN_TANGENT);
    const SAnmInput* pOutTanget = sAnmChannel.FindInput(E_INPUT_SEMANTIC_OUT_TANGENT);
    
    if ((pInTanget != IZ_NULL) && (pOutTanget != IZ_NULL)) {
        VRETURN((sKey.stride == pInTanget->stride)
                && (sKey.stride == pOutTanget->stride));

        IZ_UINT pos = sKey.stride * nKeyIdx;

        for (IZ_UINT i = 0; i < sKey.stride; i++) {
            tvValue.push_back(pValue->params[pos + i]);
            tvValue.push_back(pInTanget->params[pos + i]);
            tvValue.push_back(pOutTanget->params[pos + i]);
        }
    }
    else {
        VRETURN((pInTanget == IZ_NULL)
                && (pOutTanget == IZ_NULL));

        tvValue.resize(sKey.stride);
        IZ_UINT pos = sKey.stride * nKeyIdx;

        for (IZ_UINT i = 0; i < sKey.stride; i++) {
            tvValue[i] = pValue->params[pos + i];
        }
    }

    sKey.numParams = static_cast<IZ_UINT>(tvValue.size());

    return IZ_TRUE;
}
Exemplo n.º 28
0
    // セマフォカウントを指定された数だけ増やす.
    void CSemaphore::Release(IZ_UINT count/*= 1*/)
    {
        // もし、セマフォが非シグナル状態ならセマフォをシグナル状態にする

        IZ_ASSERT(m_Handle != IZ_NULL);

        // 0なんてある?
        count = (count == 0 ? 1 : count);

        IZ_BOOL result = ::ReleaseSemaphore(m_Handle, count, IZ_NULL);
        IZ_ASSERT(result);
    }
Exemplo n.º 29
0
IZ_BOOL CStateNormalMap::Enter(izanagi::IMemoryAllocator* allocator, void* val)
{
	izanagi::graph::CGraphicsDevice* pDevice = CMySystem::GetInstance().GetGraphicsDevice();
	izanagi::IMemoryAllocator* pAllocator = CMySystem::GetInstance().GetMemoryAllocator();

	// シェーダ
	m_pShader = CShaderBase::CreateShader<CNormalMapShader>(
					pAllocator,
					pDevice,
					"./data/NormalMapShader.bin");
					//"./data/PhongeShader.bin");
	IZ_ASSERT(m_pShader != IZ_NULL);

	// グリッド
	m_pGrid = izanagi::CDebugMeshGrid::CreateDebugMeshGrid(
				pAllocator,
				pDevice,
				0xffffffff,
				20, 20,
				10.0f);
	IZ_ASSERT(m_pGrid != IZ_NULL);

	// XYZ軸
	m_pAxis = izanagi::CDebugMeshAxis::CreateDebugMeshAxisDefault(
				pAllocator,
				pDevice);
	IZ_ASSERT(m_pAxis != IZ_NULL);

#if 0
	// 球
	m_pMesh = izanagi::CDebugMeshSphere::CreateDebugMeshSphere(
				pAllocator,
				pDevice,
				//izanagi::E_DEBUG_MESH_VTX_FORM_POS | izanagi::E_DEBUG_MESH_VTX_FORM_COLOR | izanagi::E_DEBUG_MESH_VTX_FORM_UV | izanagi::E_DEBUG_MESH_VTX_FORM_NORMAL,
				izanagi::E_DEBUG_MESH_VTX_FORM_POS | izanagi::E_DEBUG_MESH_VTX_FORM_COLOR | izanagi::E_DEBUG_MESH_VTX_FORM_UV | izanagi::E_DEBUG_MESH_VTX_FORM_NORMAL | izanagi::E_DEBUG_MESH_VTX_FORM_TANGENT,
				0xffffffff,
				5.0f,
				50, 50);
#else
	// 矩形
	m_pMesh = izanagi::CDebugMeshRectangle::CreateDebugMeshRectangle(
				pAllocator,
				pDevice,
				izanagi::E_DEBUG_MESH_VTX_FORM_POS | izanagi::E_DEBUG_MESH_VTX_FORM_COLOR | izanagi::E_DEBUG_MESH_VTX_FORM_UV | izanagi::E_DEBUG_MESH_VTX_FORM_NORMAL | izanagi::E_DEBUG_MESH_VTX_FORM_TANGENT,
				0xffffffff,
				1, 1,
				20.0f, 20.0f);
#endif
	IZ_ASSERT(m_pMesh != IZ_NULL);

	return IZ_TRUE;
}
Exemplo n.º 30
0
    IZ_BOOL CGestureDetector::IsCancel(
        threadmodel::CTimerTask* task,
        void* data)
    {
        IZ_ASSERT(task != IZ_NULL);
        IZ_ASSERT(data != IZ_NULL);

        TYPE type = *(TYPE*)data;

        CTask* gestureTask = reinterpret_cast<CTask*>(task);

        return (gestureTask->GetGestureType() == type);
    }