SFML rendertexture不返回纹理

时间:2015-10-19 16:43:37

标签: c++ sfml

我在获取sfml rendertexture以正确返回其纹理时遇到问题我相信我已将其缩小到这段代码。我相信这与我试图将rendertexture中的纹理复制到纹理贴图中的方式有​​关。

renderedchunks将是私有的我只需将其公开以快速测试该功能。

这是头文件

#ifndef TILE_MAP_H
#define TILE_MAP_H
#include "SFML/Graphics.hpp"
#include <map>
#include "Chunk.h"
//Class designed to manipulate chunks
//


class Tile_Map
{
public:
    Tile_Map();
    void RenderChunk(Texture_Manager&, int x, int y);
    void CreateChunk(int x, int y); //Eventually will create based on biomes
    std::map<int, std::map<int, sf::Texture> > renderedchunks;



protected:
private:



    std::map<int, std::map<int, Chunk> > chunkmap; //Used to store all created chunks



};

这是cpp文件

#include "Tile_Map.h"

Tile_Map::Tile_Map()
{
//ctor
}

void Tile_Map::CreateChunk(int x, int y)
{

chunkmap[x][y];
Chunk& chunk = chunkmap[x][y];
chunk.SetBiome("grass");
}

void Tile_Map::RenderChunk(Texture_Manager& tempmanager, int x, int y)
{
sf::RectangleShape drawable[8][8];
sf::RenderTexture drawingtexture;
Chunk& rchunk = chunkmap[x][y];

float renderx = 0;
float rendery = 0;

if(rchunk.GetBiome() == "grass")
{
    for(int it = 0; it < 8; it++)
    {
        for(int it2 = 0; it2 < 8; it2++)
        {
            drawable[it][it2].setTexture(&tempmanager.GetTexture("grass"));
            drawable[it][it2].setPosition(renderx, rendery);
            drawingtexture.draw(drawable[it][it2]);
            std::cout << "x = " << renderx << std::endl;
            renderx += 32;

        }
        renderx = 0;
        std::cout << "y = " << rendery << std::endl;
        rendery += 32;
    }
}
drawingtexture.display();
renderedchunks[x][y] = drawingtexture.getTexture();

}

2 个答案:

答案 0 :(得分:0)

为什么你需要sf :: Texture的副本?每个块都有一个纹理副本,想象一下它的1024x1024像素图片,它的大小是1 mb,50 * 50将等于2500 mb的ram,所以对你来说最好的,将存储指向纹理的指针,这样你就可以拥有一个原始纹理,而其他所有纹理将指向它在内存中的地址并使用原始纹理

答案 1 :(得分:0)

只调用RenderTexture的默认构造函数,您将获得

  

一个空的无效渲染纹理。您必须调用create才能拥有有效的渲染纹理。

请在RenderTexture上调用create,因为:

  

在调用此函数之前,渲染纹理处于无效状态,因此在对渲染纹理执行任何操作之前必须先调用它。

请参阅the help file for RenderTexture