ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SFML/ 사용자 데이터 스트림
    활동 기록 😵‍💫/SFML 테트리스 2023. 2. 4. 02:16

    SFML에는 이미지, 글꼴, 사운드 등 여러 리소스 클래스가 있습니다.

    대부분의 프로그램에서 이러한 리소스는 해당 loadFromFile기능의 도움을 받아 파일에서 로드됩니다

     

    입력 스트림

    sf::InputStream 클래스는 네가지 가상함수를 선언

    class InputStream
    {
    public :
    
        virtual ~InputStream() {}
    
        virtual Int64 read(void* data, Int64 size) = 0;
    
        virtual Int64 seek(Int64 position) = 0;
    
        virtual Int64 tell() = 0;
    
        virtual Int64 getSize() = 0;
    };

    read 스트림에서 크기바이트의 데이터 추출하여 제공된 데이터 주소에 복사

    seek 스트림에서 현재 읽기 위치 변경 

    tell 스트림에서 현재 읽기 위치 반환하거나 오류시 -1 반환

    getSize 스트림에 포함된 데이터의 총 크기 반환하거나 오류시 -1 반환

     

    사용자정의스트림 클래스 

    InputStream 사용 인스턴스화하고 로드하려는 개체의 loadFromStream 함수에 전달 

    sf::FileStream stream;
    stream.open("image.png");
    
    sf::Texture texture;
    texture.loadFromStream(stream);

     

    어떻게 쓰는건지 모르겟어서 직접 해보려는데 어렵다...

    
    #ifdef  SFML_FILEINPUTSTREAM_HPP
    
    #endif  SFML_FILEINPUTSTREAM_HPP
    
    
    #include <SFML/Config.hpp>
    #include <SFML/System/Export.hpp>
    #include <SFML/System/InputStream.hpp>
    #include <SFML/System/NonCopyable.hpp>
    #include <cstdio>
    #include <string>
    
    #ifdef SFML_SYSTEM_ANDROID
    namespace sf {
    	namespace priv {
    		class SFML_SYSTEM_ARI ResourceStream;
    	}
    }
    #endif
    using namespace sf;
    
    //SFML 2.5.1 을 설치해줘야 실행가능
    
    
    
    class SFML_SYSTEM_API FileInputStream : public InputStream, NonCopyable {
    public:
    	FileInputStream();
    
    	virtual ~FileInputStream();
    
    	bool open(const std::string& filename);
    
    	virtual Int64 read(void* data, Int64 size);
    
    	virtual Int64 seek(Int64 position);
    
    	virtual Int64 tell();
    
    	virtual Int64 getSize();
    
    private:
    #ifdef SFML_SYSTEM_ANDROID
    	priv::ResourceStream* m_file;
    #else 
    	std::FILE* m_file;
    #endif
    };

    도 해봤는데 오류다..

    파일을 열고 ?그 안에 입력을 하는거 같은데 

    사용안할것 같으니까 그만알아봐야겠다.....

Diseñada por Tistory.